2 votes

rôles et droits d'accès des utilisateurs asp.net mvc3

Dans mon application ASP.NET MVC3, j'ai des utilisateurs, des rôles et des entités. Les rôles des utilisateurs auront accès aux entités. Ainsi, lors du stockage des utilisateurs et des rôles dans la base de données, quelle est la bonne approche parmi les suivantes ?

  1. Pour stocker la liste des utilisateurs dans les tables d'entités

  2. Ids d'entité dans la table des utilisateurs.

À l'avenir, le nombre d'entités peut augmenter jusqu'à 1000, 10000 et je veux donc prendre en compte l'aspect performance.

1voto

Shyju Points 46555

Je pense que la relation entre le rôle et l'entité est multiple. Un rôle peut avoir zéro ou plusieurs entités et une entité peut appartenir à zéro ou plusieurs rôles. Il faut donc créer une troisième table avec deux colonnes pour stocker ces entités, RoleId y EntityID

Voici un exemple de données

ROLE_ID        ENTITY_ID
-----------------------------------
1              144
1              146
2              194
4              14
4              194

0voto

Kevin Junghans Points 10012

En fonction de la granularité du contrôle dont vous avez besoin pour votre application, vous pouvez envisager le modèle utilisé dans Windows Identity Foundation (WIF), qui fait désormais partie de .NET Framework 4.5. Il s'agit d'un modèle architecture basée sur les réclamations et le terme utilisé pour ce que vous appelez Entité es Ressources . Ce qui diffère de votre modèle, c'est qu'ils ont également le concept de Fonctionnement . A Ressources peut avoir plusieurs Opérations et d'un Fonctionnement serait quelque chose comme lire, écrire, exécuter. C'est là qu'intervient la granularité plus fine du contrôle.

Dans ce cas, un Fonctionnement pour un Ressources peut avoir plusieurs Rôles et un Rôle peut avoir plusieurs Opérations ce qui nécessite une autre table pour mettre en correspondance cette relation de plusieurs à plusieurs. Utilisation de int comme clé primaire dans Rôles y Opérations en tant qu'identifiants d'objets est une bonne chose pour la performance. Utilisateur peut avoir plusieurs Rôles y Rôles aura de nombreux Utilisateurs Vous aurez donc à nouveau besoin d'une autre table pour gérer cette relation de plusieurs à plusieurs.

La réponse à la question 1 est donc que vous ne stockez pas le Utilisateur dans une liste de Entité table. Vous disposez d'un Utilisateur qui correspond à la table de Utilisateurs - rôles qui correspond à Rôles qui correspond à Rôles-opérations qui correspond à une table de Opérations qui correspond à la table de Ressources . Si vous n'avez pas besoin de la granularité de Opérations éliminez ce tableau et mettez en correspondance vos Rôles a Ressources via une autre table pour gérer cette relation multiple.

La réponse à la question 2 est non. Entité ( Ressources ) dans la base de données Utilisateur table. A Utilisateur est mappée à un Ressources par le biais des relations que j'ai décrites ci-dessus.

La meilleure approche pour utiliser ce modèle et l'ensemble de l'architecture basée sur les demandes d'indemnisation consiste à ne pas attribuer de droits d'entrée à l'assuré. Rôles à vos méthodes à l'aide de l'option Attribut d'autorisation C'est ainsi que l'on procédait généralement dans le passé. Au lieu de cela, les Ressources y Fonctionnement à vos méthodes, ce qui dissocie votre politique de sécurité de votre application. Pour un modèle de cette approche, voir ClaimsPrincipalPermissionAttribute . Vous pouvez créer votre propre AuthorizeAttribute personnalisé qui utilise cette approche.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X