Benutzerdefinierte Autorisierungs-Basis mit Rollen asp.net mvc
Habe ich eine benutzerdefinierte Authentifizierung und Autorisierung für meine Nutzer.Das problem, das ich bin vor ist, wie man mvc zu prüfen, die Rolle von innen meine Benutzer-Tabelle entspricht die [zu Autorisieren(Rolle)] auf meinen controller so eingestellt httpauthorised zu wahren.Unten ist mein customauthorise Klasse.
[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class, Inherited = true, AllowMultiple = true)]
public class CustomAuthorizeAttribute : AuthorizeAttribute
{
public override void OnAuthorization(AuthorizationContext filterContext)
{
base.OnAuthorization(filterContext);
if (!filterContext.HttpContext.User.Identity.IsAuthenticated)
{
filterContext.Controller.TempData["ErrorDetails"] = "You must be logged in to access this page";
filterContext.Result = new RedirectResult("~/User/Login");
return;
}
if (filterContext.HttpContext.Request.IsAuthenticated)
{
using (var db = new GManagerDBEntities())
{
var authorizedRoles = (from u in db.Users
where u.Username == filterContext.HttpContext.User.Identity.Name
select u.Role).FirstOrDefault();
Roles = String.IsNullOrEmpty(Roles) ? authorizedRoles.ToString() : Roles;
}
}
if (filterContext.Result is HttpUnauthorizedResult)
{
filterContext.Controller.TempData["ErrorDetails"] = "You do nat have necessary rights to access this page";
filterContext.Result = new RedirectResult("~/User/Login");
return;
}
}
public CustomAuthorizeAttribute(params object[] roles)
{
if (roles.Any(r => r.GetType().BaseType != typeof(Enum)))
throw new ArgumentException("roles");
this.Roles = string.Join(",", roles.Select(r => Enum.GetName(r.GetType(), r)));
}
}
unten ist mein controller mit Dekoration
[CustomAuthorize(Role.Administrator)]
[HttpGet]
public ActionResult CreateEmployees()
{
return View();
}
und meine enum-Element für Rolle
public enum Role
{
Administrator = 1,
UserWithPrivileges = 2,
User = 3,
}
und Modell
public class UserModel
{
public int UserID { get; set; }
[Required]
[Display(Name="Username:")]
public string Username { get; set; }
[Required]
public string Password { get; set; }
public int Role { get; set; }
}
sehen pastie für klare Sicht pastie
links habe ich angesehen bei dem Versuch, dies zu lösen, unter anderem, aber ich kann nicht scheinen, um Stück es zusammenMVC-3 Autorisieren von benutzerdefinierten Rollen
http://forums.asp.net/p/1573254/3948388.aspx
Anpassbare Autorisierung Attribut in MVC 4 mit Rollen
Hoffe auf eine einzige Tabelle und die Rolle als ein integer, aber wenn alles scheitert, wird Sie einfach erstellen Sie eine Rollen-Tabelle und der Umsetzung Ihrer Anregung @VikasRana
Ich habe versucht, es zu verändern nach Ihrem link zu dieser pastie.org/9510205 noch kein Glück
Endlich geschafft, ich hatte nicht die ' protected void Application_PostAuthenticateRequest(Object sender, EventArgs e)' - Methode in der global.asax
InformationsquelleAutor GotaloveCode | 2014-08-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwendung der freigegebenen link von @VikasRana http://www.codeproject.com/Articles/578374/AplusBeginner-splusTutorialplusonplusCustomplusF
Entledigte ich mich meiner enum Rolle und meine Methode
Ich dann veränderte Rolle in meinem Modell ein string, wie z.B. Benutzer.Role="Admin" statt des int.
In meinem onAuthorization Methode, die ich geändert es zu:
und in meiner global.asax Hinzugefügt.
Oben genannte Methode ist nicht ideal aber.Es wird ausgeführt für jede einfache Anfrage Seite etwa 3-mal oder mehr.
So, hier ist Lösung 2:bessere Lösung
Implementieren Sie eine benutzerdefinierte Rolle, die Anbieter da sind wir auch schon mit benutzerdefinierte Funktion, die Umsetzung.Folgen Sie einfach diesem linkhttp://techbrij.com/custom-roleprovider-authorization-asp-net-mvc
InformationsquelleAutor GotaloveCode
Dank Gotalove für diese Methode im Allgemeinen.asax. Hier finden Sie einige weitere Hilfe für jeden, der versucht zu tun, eine benutzerdefinierte Formularauthentifizierung (FormsAuthentication, FormsAuthenticationTicket) mit entity framework.
Login-Controller
SetAuthTicket
WebConfig
Global.asax (Aus obigem Beispiel)
InformationsquelleAutor P.Hoxha