2009-10-06 8 views
2

Je travaille sur ce projet qu'un utilisateur admin peut créer des groupes d'utilisateurs qui fonctionneront comme des rôles de projet. Ainsi, l'administrateur créera un groupe d'utilisateurs nommé "SuperAdmin" et sélectionnera dans une liste déroulante les utilisateurs qui feront partie de ce groupe.Asp.net MVC - Comment puis-je obtenir des rôles utilisateur sans connaître ces rôles?

J'ai travaillé avant dans une solution à l'aide RoleProvider et en utilisant attibutes, mais en cette occasion, je créé tous les groupes et régler manuellement dans le contrôleur de contrôleur, comme:

[Access(Roles = "SuperAdmin")] 
public UserController : Controller 
{ 
} 

Dans l'exemple ci-dessus, je sais que le groupe s'appelle "SuperAdmin". Mais, maintenant, dans ce nouveau projet, je ne sais pas quels groupes un utilisateur admin va créer. Alors comment puis-je obtenir tous les rôles auxquels un utilisateur sera autorisé à accéder dynamiquement?

Merci!

Répondre

4

Si je comprends bien votre question, vous voulez coder en douceur la valeur "SuperAdmin".

J'ai rencontré un problème similaire, car je voulais vérifier qu'un utilisateur avait accès à une certaine ressource (appelez-le un document), mais l'ID de cette ressource était inconnue pendant le développement de l'application. Je l'ai résolu en créant ma propre sécurité basée sur des tables et en en mettant la logique de base dans mon modèle (en fait, la couche logique métier). Cela me permet de sécuriser les données extraites de la base de données et de rediriger un utilisateur s'il demande une ressource pour laquelle il n'a pas accès. Si vous voulez toujours le faire avec un attribut, vous pouvez créer un attribut personnalisé (modélisant celui qu'utilise ASP.NET MVC) qui recherche les autorisations appropriées dans la base de données et effectue une détermination.

Ou, vous pouvez le faire à l'intérieur de la méthode du contrôleur, en utilisant quelque chose comme ceci:

Public ActionResult EditThing(int ID) 
{ 
    ThingRepository repository = new ThingRepository(); 

    If (!repository.UserHasAccess(int ID)) 
     Return View("NotAuthorized") 
    // 
    // Do stuff here 
} 

Voir la NerdDinner tutorial si vous avez besoin de plus d'informations sur les dépôts.

Plus d'infos ici: Document-Based Security in ASP.NET MVC

+0

@AndreMiranda - Comment l'administrateur affecte-t-il des DROITS aux rôles? C'est à dire. qu'est-ce qui rend le rôle SuperAdmin créé dynamiquement spécial? Quelque part vous avez besoin de stocker un mappage des rôles sur les autorisations - qu'il s'agisse de modifier une page, d'afficher un formulaire ou d'accéder à une page, comment autorisez-vous l'administrateur à les définir? –

1

Avez-vous songé à écrire votre propre attribut que vous pouvez décorer votre action? Dans ce cas, vous pouvez utiliser l'attribut pour obtenir les droits d'accès pour un utilisateur, faire correspondre cela avec une table d'accès aux pages, puis renvoyer le résultat et autoriser ou refuser l'accès à la page/action.

Je pense que vous aurez besoin d'un tableau qui dictera les pages auxquelles un rôle a accès et qui peuvent être croisées avec les rôles assignés à un utilisateur. Ou vous pouvez écrire votre attribut de manière à ce qu'il dicte les rôles autorisés à voir la page.

[MyAccessAttribute(Allow="SuperUser", "Admin")] 
public ActionResult MyAction() 

Cela aide-t-il?

Questions connexes