如何从 SQL 成员资格提供程序中的 ID 获取角色 asp.net
本文关键字:ID 获取 角色 net asp 程序 SQL 成员 | 更新日期: 2023-09-27 18:32:08
MemberProvider 有方法
public abstract MembershipUser GetUser(
Object providerUserKey,
bool userIsOnline
)
按用户的唯一标识符查找用户。如果您希望拥有自己的数据库并将某些对象与某些成员资格相关联,这将非常有用。
你能用角色提供程序做同样的事情吗?似乎没有任何方法可以将角色映射到其唯一标识符,反之亦然。
作为旁注,是只将自己的表添加到 asp.net sql 数据库中是个好主意,还是最好为您自己的对象创建一个单独的数据库,并在 asp.net sql 成员资格表中具有外键。
API 中无法从 ID 返回角色 - 您可以通过以下方式获取所有角色
Roles.GetAllRoles();
或者,您可以通过以下方式获取用户的所有角色
Roles.GetRolesForUser(userName);
但没有一个角色。
我猜这样做的原因是那里的角色本身可能没有那么有用(至少就Microsoft而言)。
当然,角色只是数据库中的一个表,因此您可以使用一些直接的SQL轻松地自己添加此功能 - 这只需要更多的工作。
在附加数据方面 - 我通常按照您上面建议的外键在同一个数据库中创建自己的表。尽管如果您还没有听说过配置文件提供程序(http://msdn.microsoft.com/en-us/library/0580x1f5.aspx),您可能也想研究一下。
没有"asp.net sql 数据库"这样的东西。 如果您尚未指定默认数据库,则 asp.net 为您创建默认数据库。 没有理由将此默认数据库与常规数据库分开使用。 这就是它有一个连接字符串的原因。
会员资格的全部意义在于它是灵活的,可以根据需要使用。
在登录页面上,Page.User
变量仍设置为匿名。 如果您想在登录前验证角色,您可以构建自己的GenerpicPrincial
,如下所示:
var principal = new GenericPrincipal(
new GenericIdentity(username),
Roles.GetRolesForUser(username));