Prima di tutto, io sono a conoscenza di questa domanda: MVC 5 AddToRole requires logout before it works?ASP.NET Identità, aggiungere un altro utente al ruolo istantaneamente (che non c'è bisogno di uscire e di nuovo)
e questo: What is ASP.NET Identity's IUserSecurityStampStore<TUser> interface?
quindi si prega di non contrassegnarlo come duplicato.
Sto cercando di aggiungere un altro utente a un ruolo (cioè l'utente stiamo aggiungendo al ruolo non è l'utente corrente. Se lo sono, la risposta alla prima domanda che ho legato alla è sufficiente.)
Come così:
IdentityResult result = await userManager.AddToRoleAsync(userID, roleName);
le due situazioni che sto facendo questo sono: da una pagina di amministrazione, in cui l'utente corrente è l'amministratore; e un webhook protetto con l'autenticazione di base (in cui non vi è alcun utente corrente).
IL PROBLEMA: se l'utente a cui si applica questa modifica è connesso e utilizza l'app, ho bisogno della modifica "aggiungi al ruolo" per applicare immediatamente. Non dovrebbero dover disconnettersi e rientrare per far si che il cambiamento avvenga, e deve avvenire immediatamente.
Grazie a tutti.
MODIFICA: A proposito, User.IsInRole (roleName) richiede il logout e il login per riflettere sull'aggiunta al nuovo ruolo. UserManager.IsInRole (userID, roleName) non lo fa, perché (presumo) va direttamente alle tabelle del database per verificare. Ma se l'utente raggiunge un metodo di azione protetto con il ruolo a cui è appena stato aggiunto, deve ancora accedere di nuovo, il che è abbastanza giusto. Ancora curioso se c'è un modo per aggirare questo.
EDIT: Ecco il codice sorgente per l'attributo Autorizza: https://github.com/ASP-NET-MVC/aspnetwebstack/blob/4e40cdef9c8a8226685f95ef03b746bc8322aa92/src/System.Web.Mvc/AuthorizeAttribute.cs
Esso utilizza User.IsInRole, che è essenzialmente il motivo per cui abbiamo bisogno di accedere nuovamente. Sembra che il metodo per eseguire l'override sia AuthorizeCore (HttpContextBase httpContext). Non sono coraggioso o abbastanza bravo per scherzare con questo in questo momento, ma se vuoi farlo, molte persone lo troveranno utile.
Sono interessato a conoscere la risposta a questa domanda da quando mi sono chiesto – jamiedanq