Ich verwende eine statische Klasse für die Validierung der Rolle und in der cshtml ich diese Klasse verwendet, ist die Rollenvalidierung aus der cshtml.
Ich habe meine autorisierten Funktionen oder Inhalte in der Datenbank (nach Benutzer oder nach Rolle), so dass Sie nicht erneut implementieren müssen, wenn sich die Zugriffsdefinition ändert.
public static class AuthorizeContent
{
public static bool AuthorizeAccessContent(string Content)
{
bool bReturn = false;
DBContext db = new DBContext();
string[] RolesUser = Roles.GetRolesForUser(WebSecurity.CurrentUserName);
foreach (AuthorizedContentRole aut in db.AuthorizedContentRole)
{
foreach (string rol in RolesUser)
{
if (aut.Role==rol && aut.Content==Content)
{
bReturn = true;
break;
}
}
}
foreach (AuthorizedContentUser aut in db.AuthorizedContentUser)
{
if (aut.UserName == WebSecurity.CurrentUserName && aut.Content == Content)
{
bReturn = true;
break;
}
}
return bReturn;
}
/// in der cshtml
@if (AuthorizeContent.AuthorizeAccessContent(Content))
{
<li class="two">
<h5>Administrator link</h5>
@Html.ActionLink("Admin secret info","Index", "Information")
</li>
}
Sie auch einen Filter wie [AccionAuthorize (Action = "myCONTENT")]
public class AccionAuthorizeAttribute : AuthorizeAttribute
{
public string Action { get; set; }
public override void OnAuthorization(AuthorizationContext filterContext)
{
if (!filterContext.HttpContext.User.Identity.IsAuthenticated)
filterContext.Result = new HttpUnauthorizedResult();
else if (!AutorizacionContenido.AutorizaAccesoContenido(Action))
filterContext.Result = new HttpUnauthorizedResult();
base.OnAuthorization(filterContext);
}
}
Dank nutzen könnten! Hier ist eine Wendung - ich habe meine Tab-Links in der Masterseite und ich möchte einen Tab für bestimmte Rollen angezeigt werden. Weißt du, wie ich eine Referenz zu meinem Master für den IPrincipal hinzufügen kann? – Ben
Verwenden Sie 'HttpContext.Current.user' oder' ViewContext.HttpContext.User' - das sollte den Trick machen :-) – Charlino
Ahh, jetzt kann ich mit den Dingen weitermachen ... Ich schätze die Hilfe! – Ben