J'apprécierais vraiment des commentaires sur ce que je suis en train de réaliser:ASP.Net MVC et affiliations
Le problème:
- Je voudrais d'autoriser un utilisateur de ma demande à une seule action sur le contrôleur. Par exemple: un utilisateur peut effectuer l'action "save" sur ma classe de contrôleur s'il a l'autorisation requise.
- Dans le projet sur lequel je travaille, la création des rôles & leur autorisation est effectuée par l'équipe de déploiement du client & qui n'est pas sous mon contrôle. Donc, je programme à un "point de contrôle" qui peut être assigné à un rôle/utilisateur, alors que mon application doit seulement vérifier ce point de contrôle.
- Comment obtenir un concept de point de contrôle dans ASP.Net MVC? Plus spécifiquement, comment activer/désactiver les boutons sur la vue en fonction de l'autorisation de l'utilisateur sur le contrôleur?
Ma solution:
- Ref .: http://weblogs.asp.net/fredriknormen/archive/2008/03/12/asp-net-mvc-framework-2-interception-and-creating-a-role-action-filter.aspx - comme point de départ
- Au lieu de créer un filtre de rôle comme expliqué dans le lien ci-dessus, j'aurais une classe ControlPointFilter qui obtiendrait la modèle & faire le contrôle d'autorisation.
- Le problème que j'ai est dans la classe View & Je passe actuellement la collection de points de contrôle à laquelle l'utilisateur a accès dans la collection ViewData [].
- Dans la classe View, je vérifie si le point de contrôle associé est présent dans la collection ViewData (ce que je n'aime pas - veut garder le code au minimum dans la classe View)
- L'autre problème est - alors que le nom du point de contrôle actuel est défini dans l'attribut de la classe de contrôleur, où/comment puis-je transmettre ces attributs à la vue & tout en gardant la vue propre?
Espérons que cela aide & à apprécier votre temps et vos efforts pour y répondre!
Ensoleillé
Salut tvanfosson - cette solution a l'air bien et je vais certainement essayer. Je ne suis pas encore clair comment un attribut sur le contrôleur peut être passé à la classe de base du contrôleur pour l'ajouter à une collection de points de contrôle. Peut-être que je manque un point ici - mais je crois qu'en utilisant votre solution, j'aurais un code comme: base.ControlPointCollection.Add ("my_control_point"); alors que le même aurait déjà été mis en tant qu'attribut à la méthode d'action (ou devrais-je PAS utiliser un attribut dans ce cas?) Ensoleillé – Sunny
Si vous dérivez de AuthorizeAttribute, le AuthorizationContext qui est un paramètre de la méthode OnAuthorize contiendra une référence au contrôleur. Transmettez-le à la classe de contrôleur de base (en utilisant "as" et vérifiez null) et vous pouvez ensuite accéder à ses propriétés. Votre collection devra être publique. – tvanfosson