Ich habe es gerade mit meiner Einrichtung arbeiten, die auch Identity Framework verwendet.
habe ich einen Benutzer zu einer Rolle mit dem folgenden Code:
this.RoleManager.CreateAsync(new Role() {Name = "Customers"});
this.UserManager.AddToRoleAsync(this.User.Identity.GetUserId<int>(), "Amazing");
jederzeit danach Dann, als ich User.IsInRole("Customers");
lief es falsch zurück, das war, bis ich sie in relogged zurück
.
Sie müssen den Benutzer erneut anmelden, nachdem Sie den Benutzer der Rolle hinzugefügt haben. Die Rolleninformation ist in den Cookies gespeichert.
Ich lief wieder dem Benutzer die folgenden protokollieren:
var user = await this.UserManager.FindByNameAsync("bob");
var identity = await this.UserManager.CreateIdentityAsync(user, DefaultAuthenticationTypes.ApplicationCookie);
this.AuthManager.SignIn(new AuthenticationProperties() { IsPersistent = true }, identity);
Von diesem Punkt User.IsInRole("Customers")
für mich gearbeitet und kehrte true
.
Dies funktioniert jedoch nicht, es sei denn, Sie können in Ihrer Anwendung überprüfen, ob die Rolle bekannt ist, der Sie sie hinzufügen möchten.
var roleExists = (this.RoleManager.FindByNameAsync("Customers").Result != null);
Gibt Ihre Datenbank an, dass der Benutzer definitiv in der Rolle ist und der Rollenname genau richtig ist? Und ist der Nutzer definitiv eingeloggt? IE ... Wenn Sie dem Controller ein '[Authorize]' hinzufügen, laden Sie die Aktionen? – Luke
Der Name der Rolle ist korrekt und sie existiert in db für diesen Benutzer. –
Wenn Sie '[Autorize (Roles =" Customers ")]' zu Ihrer Aktion hinzufügen, wird die Aktion geladen? Wie haben Sie den Benutzer zur Rolle hinzugefügt? – Luke