2009-05-19 4 views
1


Quelque chose de vraiment confus sur la façon dont les rôles et les tables des membres établissent une relation

Je sais comment créer des utilisateurs et de les assigner à des rôles etc, mais quand j'ai essayé de creuser un peu plus profondément dans la façon dont les rôles et les tables des membres sont en mesure d'établir une relation entre eux, je me suis totalement perdu (BTW - Je ne sais comment les clés étrangères/primaire travail;))

BTW - J'ai créé des tables dans des bases de données en utilisant l'assistant de aspnet_sqlreg


Q1 - Les deux SqlRolesProvider et SqlMemebershipProvider ont une propriété NomApplication. Je pensais que pour que les deux fournisseurs puissent créer une association entre leurs utilisateurs et leurs rôles, ils devraient tous les deux utiliser la même valeur pour la propriété ApplicationName. Mais cela ne semble pas être le cas.

A) Quoi qu'il en soit, je suppose que SqlRolesProvider.ApplicationName propriété ne permet de distinguer les entrées de la table appartenant à différents fournisseurs de rôle, mais ils ne pas utiliser cette propriété afin d'associer leurs rôles uniquement avec les fournisseurs d'adhésion avec le même ApplicationName value ?! B) Mais ne serait-il pas plus pratique si les fournisseurs de rôles ne pouvaient être associés à des fournisseurs d'appartenance avec la même valeur ApplicationName (donc où SqlRolesProvider.ApplicationName == SqlMemebershipProvider.ApplicationName) ?!



Q2 - J'étais CURIOS également si les rôles et les utilisateurs pourraient être associés si fournisseur de rôles a été connecté à DB1, alors que fournisseur d'appartenances a été connecté à DB2 . D'une manière ou d'une autre, j'étais encore capable d'assigner des utilisateurs à des rôles différents, même si les rôles étaient définis dans des bases de données différentes.


A) Mais pourquoi est-ce? A savoir, si SqlRolesProvider.ApplicationName = « rolesP » (ApplicationID = 10) et SqlMembershipProvider.ApplicationName = « membres » (ApplicationID = 100), puis pour que la table DB1 à avoir des relations avec la table dans DB2, les deux devraient se référencer par ApplicationName entrée (en réalité via ApplicationID), qui agirait comme clé étrangère/primaire.

Mais la chose est, aucun des champs de clé étrangère dans DB1 tables contient une valeur égale à SqlMembershipProvider.ApplicationID = 100, ce qui suggère qu'il n'y a aucune relation établie entre les tables dans DB1 et DB2 (je sais que ce n'est pas le cas, car je suis en mesure d'affecter des utilisateurs aux rôles). Alors qu'est-ce qui me manque?


Thanx


EDIT:

Euh, ne sais pas si quelqu'un sera toujours en train de lire, mais je l'ai fait un peu plus creuser et a même plus confus:

Si les deux rôles (avec applicationName = R1 et applicationID = 10) et fournisseur d'appartenances (avec applicationName = M1 et ApplicationID = 100) sont dans la même base de données, puis en créant un nouvel utilisateur provoque aspnet_Users table à deux créer deux entrées pour même nom d'utilisateur - un avec ApplicationID = 10 et autre avec ApplicationID = 100. Pour autant que je sache, lorsqu'un nouvel utilisateur est créé, un seul champ (avec ApplicationID = 100) doit être ajouté à aspnet_Users. Euh ?!

+1

Voici le schéma de base de données: http://webthinker.wordpress.com/2007/11/21/aspnet-membership-schema/ – Greg

Répondre

2

Avez-vous regardé la table aspnet_UsersInRoles. C'est la table qui lie l'utilisateur au rôle. Le RoleProvider est conçu pour être séparé du MembershipProvider afin que vous puissiez les avoir dans des DB séparés. En outre, il vous permet de définir des rôles pour un nom d'application et de réutiliser ces rôles dans deux applications distinctes ayant chacune un nom d'application différent pour le fournisseur d'appartenances. Ne restez pas coincé dans la mentalité que vous devez avoir le même nom d'application pour les deux fournisseurs ou que le nom de votre application doit correspondre à l'application en cours d'exécution. Vous n'avez pas besoin d'avoir de nom du tout si vous ne le souhaitez pas. J'espère que ca aide.

+0

merci à tous pour votre aide – SourceC

1

J'ai eu du mal à suivre ce que vous dites ...

Quoi qu'il en soit ... vous semblez être à la recherche à la base de données trop. Avez-vous configuré le web.config pour vos fournisseurs d'appartenance et avez-vous pu interroger "Membership" en utilisant des requêtes C# et NOT SQL?

+0

Je suis désolé, mais je ne savais vraiment pas comment le dire mieux. Quoi qu'il en soit, oui, j'ai pu interroger l'adhésion et les rôles en utilisant C# – SourceC

Questions connexes