2016-05-12 9 views
0

Ich habe dies umformuliert, um zu versuchen und eine Lösung zu bekommen.BlogEngine.NET 3.3 - Verhindern Sie, dass anonyme Benutzer bestimmte Dinge tun

Ich benutze BlogEngine.NET 3.3. Ich habe die Anforderung, 300 Zeichen der Posts im Blog anzuzeigen, und dann klickt der registrierte Benutzer auf den Post-Namen, um den Rest zu lesen.

Ich möchte nicht registrierte Benutzer (anonyme Benutzer) in der Lage sein, die 300 Zeichen zu sehen, aber wenn sie versuchen, den vollen Inhalt des Beitrags zu lesen, erhalten sie den Text "Bitte registrieren Sie sich, um diesen Inhalt zu sehen".

Ich habe das Netz durchforstet, um herauszufinden, ob jemand das schon einmal erreicht hat. Ich habe den folgenden Code gefunden. Es heißt, es in den Ordner App_Code/Extensions als .cs zu setzen, um es zu aktivieren. In Version 3.3 gibt es jedoch keinen Erweiterungsordner in App_Code. Es gibt hier einen BlogEngine.Core \ Web \ Extensions. Ich habe versucht, den unten stehenden Code in den Ordner web \ extensions zu schreiben und es scheint etwas zu tun. Es verbirgt alle meine veröffentlichten Beiträge.

Könnte jemand bitte mir dabei helfen?

using System; 

using System.Data; 

using System.Configuration; 

using System.Web; 

using System.Web.Security; 

using System.Web.UI; 

using System.Web.UI.HtmlControls; 

using System.Web.UI.WebControls; 

using System.Web.UI.WebControls.WebParts; 

using BlogEngine.Core; 

using BlogEngine.Core.Web.Controls; 

using System.Collections.Generic; 



/// <summary> 

/// Summary description for PostSecurity 

/// </summary> 

[Extension("Checks to see if a user can see this blog post.", 

     "1.0", "<a href=\"http://www.lavablast.com\">LavaBlast.com</a>")] 

public class PostSecurity 

{ 

static protected ExtensionSettings settings = null; 



public PostSecurity() 

{ 

    Post.Serving += new EventHandler<ServingEventArgs>(Post_Serving); 



    ExtensionSettings s = new ExtensionSettings("PostSecurity"); 



    s.AddParameter("Role", "Role", 50, true); 

    s.AddParameter("Category", "Category", 50); 



    // describe specific rules for entering parameters 

    s.Help = "Checks to see if the user has any of those roles before displaying the post. "; 

    s.Help += "You can associate a role with a specific category. "; 

    s.Help += "All posts having this category will require that the user have the role. "; 

    s.Help += "A parameter with only a role without a category will enable to filter all posts to this role. "; 



    s.AddValues(new string[] { "Registered", "" }); 



    ExtensionManager.ImportSettings(s); 

    settings = ExtensionManager.GetSettings("PostSecurity"); 

} 



protected void Post_Serving(object sender, ServingEventArgs e) 

{ 

    Post post = (Post)sender; 

    bool continu = false; 



    MembershipUser user = Membership.GetUser(); 



    continu = user != null; 



    if (user != null) 

    { 

     List<string> categories = new List<string>(); 

     foreach (Category cat in post.Categories) 

      categories.Add(cat.Title); 



     string[] r = Roles.GetRolesForUser(); 



     List<string> roles = new List<string>(r); 



     DataTable table = settings.GetDataTable(); 

     foreach (DataRow row in table.Rows) 

     { 

      if (string.IsNullOrEmpty((string)row["Category"])) 

       continu &= roles.Contains((string)row["Role"]); 

      else 

      { 

       if (categories.Contains((string)row["Category"])) 

        continu &= roles.Contains((string)row["Role"]); 

      } 

     } 

    } 



    e.Cancel = !continu; 

    } 

} 

Antwort

0

Dies wurde jetzt behoben. rtur von BlogEngine.Net hat freundlicherweise dabei geholfen.

using BlogEngine.Core; 
using BlogEngine.Core.Web.Controls; 
using System.Web; 

[Extension("Secure post", "1.0", "BlogEngine.NET")] 
public class SecurePost 
{ 
    static SecurePost() 
    { 
    Post.Serving += Post_Serving; 
} 

private static void Post_Serving(object sender, ServingEventArgs e) 
{ 
    if(e.Location == ServingLocation.SinglePost) 
    { 
     if (!HttpContext.Current.User.Identity.IsAuthenticated) 
     { 
      HttpContext.Current.Response.Redirect("~/account  /login.aspx"); 
     } 
    } 
    } 
} 
0

Ok, also vor einiger Zeit habe ich BlogEngine.Net, und ich werde versuchen, Ihnen aus der Spitze von meinem Geist zu helfen, so dass ich bin nicht wirklich sicher, dass meine Antwort richtig ist, aber vielleicht ist es gibt dir ein paar Hinweise, ok?

Sie sollten Mitgliedern nicht das Zugriffsrecht zum Anzeigen nicht veröffentlichter Posts geben, da dies mehr für Redakteure auf der Website ist, um Entwürfe neuer Posts speichern zu können, bevor sie für den öffentlichen Verbrauch veröffentlicht werden.

Von dem, was ich verstehe (?), Nur Ihr Freund wird Beiträge auf dem Blog schreiben, und daher sollte er der einzige mit dieser Erlaubnis sein.

Eine Sache, die funktionieren könnte, ist, jedem die Erlaubnis zu geben, Posts zu sehen, wenn das nötig ist, um die erste Seite zum Laufen zu bringen (ich erinnere mich nicht wirklich). Dann können Sie das Steuerelement/die Ansicht, das die Posts anzeigt, überschreiben/anpassen und dort überprüfen, ob der Benutzer tatsächlich registriert ist und sich entscheidet, den Post anzuzeigen, oder eine Nachricht, die ihn anweist, sich zu registrieren.

+0

Ja, das stimmt. Ich habe gerade mit Möglichkeiten experimentiert, wie es funktioniert, um die Anforderungen meiner Freunde zu erfüllen. Ich bin schwer zu finden, wo die Berechtigungen überprüft werden, wenn Sie die Beiträge anzeigen. Vielen Dank für Ihr Feedback. – Matt

+0

Wahrscheinlich gibt es dort keine Checks, da die Berechtigungen zum Anzeigen der Posts mithilfe der Admin-Seiten festgelegt werden. Sie sollten jedoch in der Lage sein, zusätzliche Logik hinzuzufügen, um dies zu erreichen. Hoffen Sie, dass es funktioniert! :) – MunchyYDL