J'ai plusieurs modèles, pour lesquels je veux montrer quelques icônes communes pour les liens d'action (nouveaux, détails, éditer, supprimer) et certains spécifiques pour certains modèles seulement; ces icônes ne doivent apparaître que lorsque l'utilisateur a l'autorisation d'effectuer l'action. Les permissions sont décidées par les rôles, mais je voudrais les résumer, de sorte que les rôles explicites nécessaires soient écrits en un seul endroit. Je voudrais également utiliser la même logique pour afficher des icônes et pour "protéger" les méthodes d'action, de sorte que si le rôle Foo
était nécessaire pour éditer lolcatz, et maintenant je veux le changer pour le rôle Bar
, je seulement avoir à changer une chose.autorisations sensibles (icône) liens d'action pour tous les modèles: comment?
Il y a plusieurs façons de l'implémenter, et je ne suis pas sûr de la marche à suivre.
Je pourrais écrire une classe ModelAction
, responsable de décider des permissions, lien, icône, texte pour une seule action, et quelques ModelActionsCollection
pour rassembler toutes les actions possibles pour un seul modèle, afin que je puisse écrire une classe parent et plusieurs descendant ceux
Mes doutes:
comment dois-je associer des modèles avec
ModelActionsCollection
? Dois-je utiliser un hachage ou une classe statique, commeSomeStaticClass.GetModelActionsCollection(someModel)
? outypeof(someModel)
, ou"className"
ou quoi?comment devrais-je décorer les méthodes? devrais-je écrire quelque chose comme:
[MyAuthorize("action", "model")] public ActionResult action(...)
ou autre chose?
est-il acceptable d'accéder à l'utilisateur authentifié actuel directement dans les méthodes de ces classes, ou devraient-ils recevoir l'utilisateur en tant que paramètre?
Quel espace de noms appartiennent à cette classe? sont-ils des modèles? aides? ou quoi?
et, enfin: quelqu'un a-t-il déjà fait tout cela de manière réutilisable?
Ok, donc, où initialisez-vous tous actionmodelpermissions? directement dans les contrôleurs, dans Application_Start ou où? – giorgian
Lorsque le lien est rendu, je reflète l'action pour obtenir l'attribut d'autorisation ActionModelPermission cela me dit les autorisations requises pour le lien et la classe css à utiliser sur le html rendu. Je vérifie ensuite les permissions actuelles des utilisateurs qui sont mises en cache dans ViewData pour voir si l'autorisation requise est donnée –