Comment étendre AuthorizeAttribute et vérifier les rôles de l'utilisateur
Je suis en train de rédiger mon propre attribut personnalisé pour ma méthode d'action appelé MyAuthorizeAttribute, je suis toujours occupé à écrire le code, voici mon partiel de code:
[AttributeUsage(AttributeTargets.Method, AllowMultiple = false)]
public class MyAuthorizeAttribute : AuthorizeAttribute
{
public new Role Roles;
public override void OnAuthorization(AuthorizationContext filterContext)
{
base.OnAuthorization(filterContext);
if (Roles != 0) //Did it this way to see what the value of Roles was
return;
//Here I am going to get a list of user roles
//I'm doing my own database calls
filterContext.Result = new HttpUnauthorizedResult();
}
}
Ici, c'est mon Rôle enum:
public enum Role
{
Administrator = 1,
SuperAdministrator = 2
}
Ma méthode d'action:
[MyAuthorize(Roles = Role.Administrator|Role.SuperAdministrator)]
public ActionResult Create()
{
return View();
}
La raison pourquoi je n'ai pas utiliser de Rôles = "Administrateur,Super -" a été parce que les rôles sont codées en dur. Je ne veux pas avoir un 100 places à changer si le rôle du changement de nom.
Donné ma méthode, quand il arrive à s' (Rôles != 0) alors les Rôles de la valeur totale est de 3, comment pourrais-je vérifier pour voir si ces 2 rôles est dans la liste des rôles d'utilisateur pour un utilisateur spécifique?
Suis-je la faire corriger ici? Si non, comment ferais-je autrement mettre en œuvre? Il n'a pas à être de cette façon que je l'ai fait dans.
OriginalL'auteur Brendan Vogt | 2011-02-25
Vous devez vous connecter pour publier un commentaire.
Ne serait-il pas mieux si MyAuthorizeAttribute accepté une IList ( ou similaire)
De cette façon, il est à la fois typesafe, mais vous n'avez pas à utiliser les indicateurs de bits.
Les indicateurs de bits sont parfaits si vous souhaitez enregistrer le reult, mais c'est dans l'autre sens.
Modifier (avec des exemples):
Contrôleur:
Exemples ajouté.
OriginalL'auteur Tomas
Si je comprends bien, votre problème ici n'est pas à hériter de la
AuthorizeAttribute
, mais plutôt de comparer les valeurs de l'enum. Vous voulez probablement un type enum que vous pouvez utiliser comme un indicateur de bit - si oui, jetez un oeil à la section sur l'Énumération des Types dans le guide de Programmation C# surtout la deuxième partie, "l'Énumération des Types d'indicateurs de Bits".De clarifier un peu:
Au lieu de simplement vérifier
Roles!=0
, vous pouvez maintenant faire quelque chose comme ceci:De rendre la comparaison plus facile, vous pouvez utiliser les éléments suivants de la méthode d'extension sur votre enum:
Je ne comprends pas comment cela va m'aider?
Veuillez voir ma mise à jour.
OriginalL'auteur Tomas Aschan