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;
}
}
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
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