Question

Actuellement, j'utilise [Authorize (rôles = ".....")] pour sécuriser mes actions de contrôleur sur mon application ASP.NET MVC 1, et cela fonctionne très bien. Cependant, certains points de vue de la recherche doivent avoir des boutons dans cette voie à ces actions qui doivent être activé / désactivé en fonction de l'enregistrement sélectionné sur la liste de recherche, ainsi que les privs de sécurité de l'utilisateur connecté.

Par conséquent, je pense que je dois avoir une classe accéder à une table DB qui références croisées ces contrôleur cible / actions avec des rôles d'application afin de déterminer l'état de ces boutons. Cette volonté, de toute évidence, les choses en désordre comme privs devront être maintenus en 2 places - dans cette table de classe / DB et sur les actions de contrôleur (plus, si je veux changer l'accès à l'action que je vais devoir changer la le code et la compilation plutôt que de simplement changer une entrée de table de DB).

Idéalement, je voudrais étendre le [Authorize] fonctionnalité de sorte qu'au lieu d'avoir à préciser les rôles dans le [Authorize] code, il interroge la classe de sécurité en fonction de l'utilisateur, le contrôleur et l'action et qui sera ensuite retourner un booléen permettant ou refuser l'accès. Y a-t-il des bons articles sur ce point - je ne peux pas imaginer que c'est une chose rare de vouloir faire, mais il me semble avoir du mal à trouver quoi que ce soit sur la façon de le faire (peut-être le cerveau lundi matin). J'ai commencé un code faisant cela, regardant l'article http://schotime.net/blog/index.php/2009/02/17/custom-authorization-with-aspnet-mvc/ , et il semble être en commençant ok mais je ne peut pas trouver la « bonne » façon d'obtenir le contrôleur d'appel et les valeurs d'action de la HttpContext - je pourrais peut-être truquer un peu de code pour les extraire de l'URL de la requête, mais cela ne me semble pas juste et je plutôt le faire correctement.

Vive

MH

Était-ce utile?

La solution

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 à mettre en œuvre

public void OnAuthorization(AuthorizationContext filterContext)

et vous pouvez utiliser

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

et même, par « action » pour « contrôleur » (assurez-vous de vérifier pour les valeurs NULL dans ces valeurs en premier). Dans MVC 2 cela peut être changé à filterContext.ActionDescriptor.ActionName et .ActionDescriptor.ControllerDescriptor.ControllerName et vous ne devez vérifier les valeurs NULL

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top