Ho appena finito di funzionare con il mio setup che utilizza anche Identity Framework.
ho aggiunto un utente a un ruolo utilizzando il seguente codice:
this.RoleManager.CreateAsync(new Role() {Name = "Customers"});
this.UserManager.AddToRoleAsync(this.User.Identity.GetUserId<int>(), "Amazing");
Poi in qualsiasi momento dopo che, quando mi sono imbattuto User.IsInRole("Customers");
è tornato falsa, che è stato fino li relogged indietro nel
.
È necessario registrare nuovamente l'utente dopo aver aggiunto l'utente al ruolo. Le informazioni sul ruolo sono memorizzate nei cookie.
Ho eseguito il seguente per registrare nuovamente l'utente:
var user = await this.UserManager.FindByNameAsync("bob");
var identity = await this.UserManager.CreateIdentityAsync(user, DefaultAuthenticationTypes.ApplicationCookie);
this.AuthManager.SignIn(new AuthenticationProperties() { IsPersistent = true }, identity);
Da questo punto, User.IsInRole("Customers")
funzionato per me e restituito true
.
Questo non funziona se non è possibile verificare all'interno dell'applicazione che è a conoscenza del ruolo a cui si desidera aggiungerli. È possibile verificare l'esistenza del ruolo "Clienti" utilizzando il RoleManager nel seguente modo:
var roleExists = (this.RoleManager.FindByNameAsync("Customers").Result != null);
Il database indica che l'utente ha sicuramente un ruolo e il nome del ruolo è corretto? E l'utente ha sicuramente effettuato l'accesso? IE ... se aggiungi un '[Authorize]' al controller, le azioni vengono caricate? – Luke
Il nome del ruolo è corretto ed esiste in db per questo utente. –
Se si aggiunge '[Autorizza (ruoli =" Clienti ")]' alla propria azione, viene caricata l'azione? Come hai aggiunto l'utente al ruolo? – Luke