Wie schalten Sie Rollen in Asp.net Identität 3.0 und MVC 6?
Ich bin nicht sicher, ob ich hier etwas fehlt. Standardmäßig User.IsInRole()
nicht funktioniert, auch wenn der Benutzer einige Rollen.
Ich habe nicht meine eigene Implementierung von Rolle-Shops. Ich gehe davon aus, dass die Standardeinstellungen sollten funktionieren. Ist es etwas besonderes, dass ich zu tun in der Startup.cs
um die Rollen zu arbeiten? Ich bin mit mvc 6 beta 2 Standard-Vorlage.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den
User.IsInRole()
funktioniert nicht, wenn ich eine Rolle wie diese:await UserManager.AddToRoleAsync(user, "Admin");
Aber es funktioniert, wenn ich dies tun:
await UserManager.AddClaimAsync(user, claim: new Claim(ClaimTypes.Role.ToString(), "Admin"));
Es sieht aus wie Sie verwenden Asp.NET Identität mit der neuesten ASP.NET 5 Sachen. Ich bin mit dem gleichen (derzeit mit RC1). Ich hatte ein ähnliches Problem, und nach einigem Graben fand ich eine Lösung mit
SignInManager
'sRefreshSignInAsync()
Methode.Beachten Sie, dass zu bekommen halten Sie eine Instanz von
UserManager
undSignInManager
verwende ich dependency injection, also der Konstruktor für mein controller sieht wie folgt aus:Meine Anforderung war, dass, wenn eine bestimmte controller-Methode aufgerufen wurde, die von einem authentifizierten Benutzer, dann eine Rolle würde Hinzugefügt werden, dass Benutzer, wenn der Benutzer nicht bereits über diese Rolle, und es musste sofort wirksam. (Nachfolgende Aufrufe
User.IsInRole("TheRole")
in Controllern und views müssen true zurückgeben, ohne dass der Benutzer ab-und wieder anmeldet).Hier ist die Aktion:
Hinweis: Sie müssen
für die
GetUserId()
- Erweiterung-Methode.Also die großen Dinge, die ich gelernt habe zu nutzen, um die
UserManager
'sAddToRoleAsync
undSignInManager
'sRefreshSignInAsync
. Die erste fügt eine Zeile zu der Tabelle AspNetUserRoles. Die zweite aktualisiert das cookie, mit dem nächsten request aus dem browser, wird sich zeigen, dass sich der Benutzer in der Rolle.Als ein beiseite, ich habe eine Methode namens
EnsureRoles()
zu starten.cs. Rufe ich es direkt nach dem aufrufenapp.UseIdentity()
imConfigure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
. So, hier ist ein snipit vomConfigure()
:und hier ist
EnsureRoles()
: