Vous ne pouvez pas faire cela. [Authorize(Roles=//set dynamically)]
doit être connu au l'heure de compilation. Également utiliser des rôles pour cette raison est déconseillé comme indiqué dans le post lié de blowdart à partir de commentaires. Au lieu de cela, vous devez utiliser des revendications et des stratégies. Les revendications sont des autorisations détaillées, par exemple "CreateCustomer" ou "DeleteCustomer" ou "ViewDashboard".
donc vous devez l'utiliser comme
[Authorize(Policy = "ViewDashboard")]
Ces politiques doivent être savoir au moment de la compilation.
public class ViewDashboardRequirement : AuthorizationHandler<ViewDashboardRequirement>, IAuthorizationRequirement
{
public override void Handle(AuthorizationContext context, ViewDashboardRequirement requirement)
{
if (context.User.HasClaim(c => c.Type == "dashboard:read"))
{
context.context.Succeed(requirement);
return;
}
// only call fail if you do not want that other AuthorizationHandler may succeed with
// a different requirement
// context.Fail();
}
}
Pour un exemple sur la façon de générer un gestionnaire générique (au lieu d'écrire un nouveau gestionnaire pour chaque politique) voir ma réponse here.
Cela vous permettra de créer des rôles configurables. Maintenant vous pouvez créer des rôles qui consistent en un sac de revendications. Chaque réclamation peut être une politique. Lorsque l'utilisateur se connecte, vous ajoutez les revendications qui appartiennent à un rôle à la liste des revendications des utilisateurs.
-à-dire
- Soutien: ViewDashboard, ViewCustomers, ViewContacts, ManageCases (billets de soutien)
- Manager: ViewDashboard, ManageCustomers (Voir, Modifier, Supprimer), ManageContacts (affichage, édition, supprimer)
- administrateur: ManageDashboard (affichage, édition)
etc.
Mettre à jour à partir de Commentaires.
You should be able to utilize ASP.NET Core Identity's claim and roleclaim abilities w/o changing a line of code, therefor you have the IdentityRole
and IdentityRoleClaim
classes. At runtime, you add a new IdentityRole
(i.e. "Manager") and then add multiple IdentityRoleClaim
(one for each permission/policy)
La réponse est vraiment bonne ... https: // stackoverflow.com/a/31465227/4755704 – Coemgen
J'ai déjà essayé. La définition AuthorizationContext n'est pas trouvée et comme pour la méthode handle, aucune méthode appropriée n'a été trouvée pour remplacer –