En ce moment, je décore une méthode comme celle-ci pour permettre aux "membres" d'accéder à l'action de mon contrôleur
[Authorize(Roles="members")]
Comment autoriser plusieurs rôles? Par exemple, ce qui suit ne fonctionne pas, mais il montre ce que j'essaie de faire (autoriser l'accès "membres" et "admin"):
[Authorize(Roles="members", "admin")]
asp.net-mvc
controller
roles
codette
la source
la source
Réponses:
Une autre option consiste à utiliser un seul filtre d'autorisation lors de la publication, mais à supprimer les citations internes.
la source
Si vous souhaitez utiliser des rôles personnalisés, vous pouvez le faire:
CustomRoles
classe:Usage
Si vous avez peu de rôles, vous pouvez peut-être les combiner (pour plus de clarté) comme ceci:
Usage
la source
Une simplification possible serait de sous
AuthorizeAttribute
- classer :Usage:
Sémantiquement, c'est la même chose que la réponse de Jim Schmehil.
la source
Pour MVC4, en utilisant un
Enum
(UserRoles
) avec mes rôles, j'utilise une coutumeAuthorizeAttribute
.Sur mon action contrôlée, je fais:
Et j'utilise une coutume
AuthorizeAttribute
comme ça:Cela fait partie du FNHMVC modifié par Fabricio Martínez Tamayo https://github.com/fabriciomrtnz/FNHMVC/
la source
Une autre solution claire, vous pouvez utiliser des constantes pour conserver la convention et ajouter plusieurs attributs [Autoriser]. Regarde ça:
Puis dans le contrôleur:
la source
Authorize
attributs utilisent la sémantique ET et nécessitent que TOUTES les conditions soient remplies (c'est-à-dire que l'utilisateur doit être à la fois dans les rôles Administrateur et Invité).Si vous vous retrouvez à appliquer ces 2 rôles souvent, vous pouvez les envelopper dans leur propre autorisation. C'est vraiment une extension de la réponse acceptée.
Et puis appliquez votre nouvelle autorisation à l'action. Je pense que cela semble plus propre et se lit facilement.
la source
Meilleur code avec l'ajout d'une sous-classe
AuthorizeRole.cs
Comment l'utiliser
la source
En utilisant AspNetCore 2.x, vous devez procéder différemment:
il suffit de l'utiliser comme ceci:
la source
la source