我知道如何创建用户并将其分配给角色等,但当我试图深入挖掘角色和成员资格表如何建立彼此之间的关系时,我完全迷失了(BTW - 我做知道外键/主键如何工作;))
BTW - 我使用aspnet_sqlreg向导在数据库中创建了表
Q1 - SqlRolesProvider 和 SqlMemebershipProvider 都有一个属性 ApplicationName 。我认为,为了使两个提供者能够在其用户和角色之间创建关联,他们都必须为 ApplicationName 属性使用相同的值。但事实似乎并非如此。
A)无论如何,我假设 SqlRolesProvider.ApplicationName 属性仅用于区分属于不同角色提供者的表条目,但它们不使用该属性以仅关联其角色成员资格提供者具有相同的 ApplicationName 值?!
B)但是,如果角色提供者只能与具有相同 ApplicationName 值的成员资格提供者相关联(因此SqlRolesProvider.ApplicationName == SqlMemebershipProvider.ApplicationName
),那么这不是最实用的吗?
Q2 - 如果角色提供程序已连接到 DB1 ,而成员资格提供程序已连接到 DB2 ,我还是可以关联角色和用户。不知何故,我仍然可以将用户分配给不同的角色,即使角色是在不同的数据库中定义的。
A)但为什么呢?即,如果 SqlRolesProvider.ApplicationName =“rolesP”( ApplicationID = 10 )和 SqlMembershipProvider.ApplicationName =“membership”( ApplicationID = 100 ),然后为了使 DB1 中的表与 DB2 中的表有关系,两者必须通过 ApplicationName相互引用条目(实际上是通过ApplicationID),它将充当外键/主键。
但问题是, DB1的表中的外键字段都没有等于 SqlMembershipProvider.ApplicationID = 100 的值,这表明没有任何关系在 DB1 和 DB2 中的表之间建立(我知道情况并非如此,因为我能够将用户分配给角色)。那我错过了什么?
感谢名单
修改
呃,不知道是否还有人会读这篇文章,但是我做了更多的挖掘并且更加困惑:
如果两个角色( applicationName = R1 和 applicationID = 10 )和成员资格提供者( applicationName = M1 和) ApplicationID = 100 )在同一个数据库中,然后创建一个新用户导致 aspnet_Users 表两个为同一个用户名创建两个条目 - 一个用 ApplicationID = 10 和其他 ApplicationID = 100 。据我所知,创建新用户时,只应向aspnet_Users添加一个字段( ApplicationID = 100 )。嗯?!
答案 0 :(得分:2)
你看过aspnet_UsersInRoles表吗?这是将用户链接到角色的表。 RoleProvider旨在与MembershipProvider分开,以便您可以将它们放在单独的DB中。此外,它允许您为一个应用程序名称设置角色,并在两个单独的应用程序中重用这些角色,每个应用程序都具有成员资格提供程序的不同应用程序名称。不要陷入两种提供者必须具有相同应用程序名称的心态,或者您的应用程序名称需要与正在运行的应用程序匹配。如果你不想,你根本不需要任何名字。我希望这会有所帮助。
答案 1 :(得分:1)
我很难跟着你说的话......
无论如何......你似乎太过关注数据库了。您是否为成员资格提供程序配置了web.config,是否可以使用C#和NOT SQL查询来查询“成员资格”?