2010-09-13 6 views
2

Je commence juste à esquisser la base d'un système basé sur le Web, et je voudrais que l'administrateur ait la possibilité de limiter l'accès soit par contrôleur ou par modèle. Mon problème est, je ne peux pas décider lequel (ou les deux?) D'entre eux je devrais aller avec. Des idées? Avantages/inconvénients? D'abord je me penchais pour le faire dans les contrôleurs, voyant qu'ils "contrôlent" le flux du système. Mais alors, pensant que l'accès devrait probablement être limité par les données auxquelles il accède, pas par la partie logique du système, j'ai senti que je devais vraiment aller avec le modèle. Maintenant, je ne peux pas décider ... Je fais des allers-retours depuis quelques jours maintenant sans vraiment aller de l'avant, alors maintenant je me tourne vers Vous, oh Internet, dans l'espoir de réponses!Limiter l'accès par contrôleur ou par modèle?

Ma mise en œuvre est en C#/ASP.NET/MVC2, mais je travaille encore « théoriquement » il est donc pas vraiment cadre spécifique ..

+0

Cherchez-vous à limiter l'accès le long des lignes d'autorisation et/ou d'authentification? Ainsi, des utilisateurs spécifiques ou des rôles spécifiques ont-ils accès à une page Web? – Lester

+0

Exactement, oui! Très probablement, ce sera par utilisateur et non par rôle, mais différents utilisateurs peuvent avoir accès à des parties très différentes du même système. – Robin

Répondre

5

Bien qu'il puisse y avoir des exceptions, le contrôle d'accès doit être effectué par le contrôleur.

Les modèles ne devraient pas contenir de fonctionnalité procédurale, juste une logique métier. La logique métier sur elle-même ne doit pas nécessairement être contrôlée par un accès. Le contrôleur, qui contient des actions qui «interagissent» avec cette logique métier et ces modèles, devrait être le lieu d'accès au contrôle d'accès. Certains frameworks fournissent déjà des fonctionnalités de contrôle d'accès, qui permettent d'évaluer l'état d'une application pour décider si une certaine action peut être effectuée.

Exemple: Sur une application Web, modèle "personne" détient "personnes", et a une fonction 'createnew (nom)' Controller 'PersonsController' a une action 'addNewPerson()', qui lit le nom de HTTP Publiez et appelez la fonction mentionnée ci-dessus. Il a également une règle d'accès qui stipule que l'action 'addNewPerson' ne peut pas être appelée si l'état actuel de l'application indique que l'utilisateur demandant l'action n'est pas connecté.

0

En général, je me attends à vos utilisateurs d'avoir des rôles qui ont accès à une gamme de fonctions qu'ils peuvent effectuer sur une gamme de modèles. Cette recherche d'accès/pas d'accès serait faite dans le contrôleur.

0

Dans le projet en cours sur lequel nous travaillons, nous limitons l'accès au niveau du contrôleur via des filtres d'action.

Les filtres d'action peuvent être définis pour une action spécifique si l'on veut limiter l'accès uniquement à celle spécifique (par exemple une page que l'utilisateur ne devrait pas voir) ou définie sur le contrôleur si cette zone est limitée. Le filtre d'action en lui-même est assez simple et utilise HttpContext pour trouver l'identité de l'utilisateur, mais dans notre cas, nous utilisons l'authentification par formulaire, cela peut donc différer selon le type de mécanisme d'authentification que vous utilisez.

1

L'autorisation de l'utilisateur est strictement basée sur une session, donc c'est mieux traité dans le contrôleur. Rendre les modèles sensibles à la session est possible, mais c'est une violation des préoccupations et certainement pas facile dans mon expérience. Vous devez également vous soucier de la sécurité des threads en fonction de votre pile technologique. La façon dont les applications Rails traitent généralement cela consiste à ajouter des fonctions d'autorisation à la classe de base Controller et à définir un before_filter soit au contrôleur entier, soit aux actions spécifiques devant autoriser la requête.

Questions connexes