2009-09-08 14 views
2

Mon application doit pouvoir être sécurisée à différents niveaux pour différentes équipes. Par exemple, quelqu'un peut être administrateur pour une équipe, mais ne peut être qu'un spectateur pour une autre.asp.net adhésion/fournisseur de rôle question

Idéalement, j'aimerais avoir un seul petit ensemble de rôles, mais j'aimerais attribuer des rôles distincts à chaque équipe. c'est-à-dire que "Joe" pourrait être un administrateur pour TeamA mais avoir un accès Lecteur pour TeamB.

Est-ce que le framework de fournisseur Asp.Net supportera cela?

--Matt

Mise à jour: Ma question est la méthode "IsInRole". Il prend un seul paramètre. Hormis le piratage (concaténation de deux éléments, comme l'identifiant de l'équipe et le nom du rôle), y a-t-il un autre moyen de s'en débarrasser?

Répondre

1

Pour autant que je sache, il n'y a pas de groupes à des rôles en termes de la façon dont la RoleProvider fonctionne, mais il n'y a aucune raison de ne pas implémenter une structure de regroupement dans votre source de données. Le RoleProvider prend toutefois en charge différents noms d'application, il est donc possible de l'utiliser pour trouver un moyen de segmenter une application dans des groupes logiques identifiés comme différents et ainsi avoir des rôles différents qui leur sont assignés.

EDIT:

En réponse à votre édition, vous pourriez avoir la structure comme suit dans votre base de données

Group Table   Access Table   Role Table 
id | name    id | name    group_id | access_id | name 
-----------   ------------   --------------------------- 
1 Team A   1 Guest    1   1   Team A Guest 
2 Team B   2 User    1   2   Team A User 
         3 Admin    1   3   Team A Admin 

un un mécanisme de mise à jour du champ name dans le tableau Role lorsqu'un une nouvelle ligne est insérée.

L'implémentation d'un RoleProvider personnalisé est très simple. Vous devez simplement hériter de RoleProvider et remplacer les méthodes dont vous avez besoin, en écrivant la logique d'où le RoleProvider doit extraire les données.

+0

Merci Russ, cette structure DB est similaire à celui que je pensais devoir utiliser. Un problème que j'ai est cependant ce que l'appelant passera à IsInRole. Le seul paramètre (nom de rôle) peut ne pas fonctionner pour moi. (J'ai trop simplifié ma question, il y a aussi une structure hiérarchique pour les équipes). Quoi qu'il en soit, merci pour l'entrée. Je pense que ceci (ou quelque chose de similaire) sera la route que je vais suivre. --- Matt –

+0

@Matt - le nom qui serait passé serait le nom dans le RoleTable, c'est-à-dire if (User.IsInRole ("Team A Guest")). –

+0

merci encore Russ. C'était aussi ma pensée (concaténant le nom). Je pense que je peux le faire fonctionner, mais il se sent hacky. –

0

Pas tout-sorti de la boîte. Vous devez créer un fournisseur personnalisé pour supporter cette fonctionnalité

ici est un exemple de la création d'un fournisseur d'appartenances personnalisé http://www.asp.net/learn/videos/video-189.aspx

+0

Voir le commentaire J'ai ajouté à la question principale ci-dessus, concernant la méthode "IsInRole". –

+0

Microsoft l'a conçu pour que vous puissiez également créer votre propre fournisseur de rôle. Créez votre propre classe en héritant d'abord du RoleProvider, puis fournissez des méthodes qui prendraient l'identifiant d'équipe, puis le nom de rôle – clyc

+0

vous devrez écrire le sql qui fera le contrôle – clyc