2010-03-08 5 views
0

Actuellement, j'utilise [Authorize (Roles = "....."]] pour sécuriser les actions de mon contrôleur sur mon application ASP.NET MVC 1, et cela fonctionne correctement. Toutefois, certaines vues de recherche doivent comporter des boutons qui permettent d'activer/désactiver les actions en fonction de l'enregistrement sélectionné dans la liste de recherche, ainsi que les privilèges de sécurité de l'utilisateur connecté.ASP.NET MVC - Extension de l'attribut Authorize

Par conséquent, je pense que besoin d'avoir une classe accédant à une table DB qui croise ces contrôleurs/actions cibles avec des rôles d'application pour déterminer l'état de ces boutons. Cela va, évidemment, rendre les choses compliquées car les privilèges devront être maintenus à 2 endroits - dans cette classe/DB table et aussi sur les actions du contrôleur (plus, si je veux changer l'accès à l'action, je vais devoir changer le codez et compilez plutôt que de simplement modifier une entrée de table DB). Idéalement, je voudrais étendre la fonctionnalité [Autoriser] afin qu'au lieu d'avoir à spécifier les rôles dans le code [Autoriser], il va interroger la classe de sécurité en fonction de l'utilisateur, du contrôleur et de l'action et cela retournera un booléen permettant ou refusant l'accès. Y a-t-il de bons articles à ce sujet - je ne peux pas imaginer que ce soit une chose inhabituelle à vouloir faire, mais je semble avoir du mal à trouver quoi que ce soit sur la façon de le faire. J'ai commencé à faire du code en regardant l'article http://schotime.net/blog/index.php/2009/02/17/custom-authorization-with-aspnet-mvc/, et il semble que ça commence bien, mais je ne trouve pas le moyen "correct" d'obtenir le contrôleur appelant et les valeurs d'action du httpContext - je pourrais peut-être truquer un un peu de code pour les extraire de l'url de la requête, mais cela ne me semble pas correct et je préfère le faire correctement.

Vive

MH

Répondre

0

J'ai trouvé sur un autre forum et ainsi signalerai ici au cas où quelqu'un juge utile. Notez que la façon dont vous faites cela change selon que vous utilisez MVC 1 ou 2

la classe que vous créez des besoins pour mettre en œuvre

public void OnAuthorization(AuthorizationContext filterContext) 

et vous pouvez utiliser

string controllerName = filterContext.RouteData.Values["controller"].ToString(); 

et même , en remplaçant "controller" par "action" (assurez-vous d'abord de rechercher les valeurs nulles dans ces valeurs). Dans MVC 2, ceci peut être changé en filterContext.ActionDescriptor.ActionName et .ActionDescriptor.ControllerDescriptor.ControllerName et vous n'aurez pas à vérifier les valeurs nulles

Questions connexes