Question

D'accord,

Je sais que je fais quelque chose de mal - mais ne peut pas trouver une meilleure façon. Je développe un site qui va permettre aux utilisateurs de configurer leurs propres mini-sites.

Quelque chose comme Ning. En outre, je ne dispose que 1 connexion de base et l'accès à chaque mini-site est fourni (en ce moment) via des rôles.

Ainsi, la façon dont je fais ce droit est maintenant:

Everytime un nouveau mini-site est créé - dire bla, je crée 2 rôles dans ma demande. blah_users et blah_admin

L'utilisateur qui crée le mini-site est donné le rôle - blah_admin et tous les autres utilisateurs qui veulent se joindre à ce mini-site (ou réseau) est donné le rôle -. Blah_user

Tout le monde peut afficher les données d'un site Web. Cependant, pour ajouter des données, il faut être membre de ce mini-site (doit avoir le rôle de blah_user attribué)

Le problème que je suis confronté est que, en faisant un système basé sur des rôles, je vais avoir à faire des tas de choses manuellement. Asp.Net 2 contrôles qui travaillent sur la propriété User.IsAunthenticated sont fondamentalement inutile pour moi maintenant parce qu'avec la propriété IsAuthenticated, je dois vérifier si l'utilisateur a le rôle.

Je suppose qu'il ya une meilleure façon d'architecte du système, mais je ne suis pas sûr de savoir comment. Toutes les idées?

Ce site est développé en ASP.Net 2 sur IIS 6. Merci une tonne!

Était-ce utile?

La solution

Je crains des rôles liées norme des choses de ASP.NET n'est pas ce que vous avez besoin. Vous pouvez essayer de changer le module d'authentification pour elle:

  1. vous vous connectez avec cookie.
  2. Déterminez quels rôles que votre visiteur a. Peut-être que vous allez utiliser une table spéciale qui correspond utilisateur et le site.
  3. Faites principale personnalisée des rôles utilisateur énumérés et attribuer l'identité et principal à la demande actuelle.

Je ne pense pas que faire des rôles spéciaux pour chaque site est une bonne idée. Lorsque vous auriez cent sites, vous auriez aussi deux cents rôles. Jolie ingérable, je crains.

Quand nous résolvons tâche similaire, nous avons été tout simplement pas l'aide des commandes standard. Nous avions un ensemble unique de rôles utilisés sur tous les sites. L'adhésion à l'utilisateur de béton est déterminée en fonction du site actuel et ses relations avec ce site.

Addition: Une autre possibilité est d'enquêter sur l'application qui existe dans le système d'authentification ASP.NET. Peut-être qu'il est possible d'isoler chaque sous-site en application séparée?

Mise à jour:. méthode qui fonctionne pour notre application

  1. Ne pas faire beaucoup de rôles clonés. Utilisez seulement deux: utilisateurs et admin. Si vos sites sont alors le rôle public « utilisateurs » pourrait être juste globale - l'utilisateur sur un site ne diffère pas d'un utilisateur sur un autre site. Si les « utilisateurs » et « tout le monde » sont différents rôles, alors bien sûr « utilisateurs » devraient également être liés à un site.

  2. Utilisez les utilisateurs des membres ASP.NET standard, mais ne pas utiliser le mécanisme de rôle standard.

  3. Faire un mécanisme de stockage relation entre le site et l'utilisateur. Il pourrait être simple table qui tient id du site, l'utilisateur est et le rôle.

  4. Ce que vous devez remplacer est la méthode IsInRole. (Méthode s pour être exact, je vais couvrir plus tard). Cette méthode est dans l'interface IPrinciple, donc vous devez faire votre propre objet principal. Il est tout à fait simple.

    1. Méthode IsInRole de ce type devrait ressembler à prendre le site actuel (de HttpRequest) regarder dans la table utilisateur du site et obtenir des rôles
  5. Ensuite, vous devez associer votre capital à une demande. Faites-le en cas PostAuthenticateRequest.

  6. Il y a aussi RoleProvider. Honnêtement, je ne sais pas quand est-il utilisé, mais il a aussi la méthode IsInRole. Nous pouvons l'ignorer de la même manière. Mais d'autres méthodes de ce fournisseur sont plus difficiles. Par exemple, AddUsersToRoles. Il accepte tableau de noms d'utilisateurs et des rôles, mais à quel contexte (site) devrait-il être ajouté? Pour courant? Je ne sais pas, parce que je ne sais pas quand cette méthode est appelée. Donc, il faut quelques expériences. Je vois (réflecteur aide) que RopePrincipal par lui-même utilise RoleProvider pour aller chercher la liste des rôles, alors peut-être implémentons seulement RoleProvider, en utilisant la norme principale. Pour notre application ce n'est pas un cas, donc je ne peux pas dire quels problèmes pourraient être cachés ici.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top