0

Je configure donc ma permission pour un site Web mvc. Et je fais une autorisation basée sur le rôle, avoir des actions dans un contrôleur exigerait des rôles différents selon le but de l'action. Je sais que le plus recommandé serait authorizeattribute (comme je veux les rôles mis en cache) mais est-il possible d'avoir la même chose avec l'attribut actionfilter?Autorisation basée sur le rôle mvc utilisant actionfilterattribute

Actuellement, j'ai un ActionFilterAttribute semblable à ceci:

public class PermissionRequired : ActionFilterAttribute{ 
    private readonly Role reqrole; 
    public PermissionRequired(Role reqRole) 
    { 
     reqrole = reqRole; 
    } 

    public override void OnActionExecuting(ActionExecutingContext filterContext) { 
     var ctrl = (GeneralController)filterContext.Controller; 

     if (!ctrl.CurrentUser.InRole(reqrole)) { 
       //some code to redirect this to a certain page 
     } 
     base.OnActionExecuting(filterContext); 
    } 
} 

et sur le GeneralController pour obtenir l'utilisateur actuel

public class GeneralController : Controller 

    private User currentUser; 
    public User CurrentUser { 
     get { 
      if (currentUser != null) 
       return currentUser; 

      int currentUserId = Convert.ToInt32(httpContext.User.identity.Name); 

      if (currentUserId != 0) { 
       this.currentUser = Tds.Users.FirstOrDefault(u => u.Id == currentUserId) 
      } 

      return currentUser; 
     } 
    } 

et sur les contrôleurs qui hériteront cet attribut

[PermissionRequired(Role.Moderator)] 
public class SomeControllerThatNeedsPermission 
{ 
    [PermissionRequired(Role.SuperAdmin)] 
    public ActionResult SomeActionThatNeedsPermission() 
     { 
     } 
} 

donc, quelqu'un d'aide est apprécié .. même des commentaires ou des pensées un re bienvenue: D

Merci beaucoup!

+0

J'ai écrit quelque chose de similaire à cela et je l'ai collé sur SourceForge; cela pourrait vous faire gagner du temps. https://sourceforge.net/projects/simplerolesecur/ –

+2

(Pas une solution réelle, donc c'est un commentaire à la place) Il y a un blog génial avec des choses à garder à l'esprit ou être au courant de [ici] (http: // blogs.msdn.com/b/rickandy/archive/2011/05/02/securing-your-asp-net-mvc-3-application.aspx). Je l'ai trouvé très utile dans un projet récent. –

+0

@rick liddle: c'est un article très utile. Merci! -Jeremy: Je vais le regarder :) – gdubs

Répondre

0

Il semble que vous n'utilisiez pas l'appartenance personnalisée ici. Dans ce cas, le faire avec un attribut actionfilter est quelque peu inutile, mais néanmoins capable.

This is an excellent article sur le même sujet - l'extension du AuthorizeAttribute pour effectuer la validation rôle en fonction et le retour des erreurs personnalisées ...

La valeur en faisant cela aussi que vient à travers (comme expliqué dans l'article) lorsque vous souhaitez afficher utilisateurs ce qui se passe quand l'autorisation échoue (le 401 n'est pas montré il se transforme en 302 en interne dans la plomberie mvc)

Questions connexes