2

MembershipProvider有方法

public abstract MembershipUser GetUser(
    Object providerUserKey,
    bool userIsOnline
)

通过用户的唯一标识符查找用户。如果您想拥有自己的数据库并将您的某些对象与某些成员相关联,这将非常有用。

你可以对RoleProvider做同样的事情吗?似乎没有任何方法可以将角色映射到其唯一标识符,反之亦然。

附带说明一下,将您自己的表添加到 asp.net sql 数据库是一个好主意,或者最好为您自己的对象创建一个单独的数据库,并在 asp.net sql 成员表中添加外键。

4

3 回答 3

2

API 中无法从 ID 返回角色 - 您可以通过以下方式获取所有角色

Roles.GetAllRoles();

或者您可以通过以下方式获取用户的所有角色

Roles.GetRolesForUser(userName);

但不是一个角色。

我猜这是因为角色本身可能没有那么有用(至少就微软而言)。

当然,角色只是数据库中的一个表,因此您可以使用一些直接的 SQL 轻松地自己添加此功能 - 只需要多做一些工作。

就附加数据而言 - 我通常在同一个数据库中创建自己的表,如您上面建议的那样使用外键。尽管如果您还没有听说过 Profile Provider (http://msdn.microsoft.com/en-us/library/0580x1f5.aspx),您可能也想了解一下。

于 2012-04-25T15:11:27.107 回答
0

没有“asp.net sql 数据库”之类的东西。如果您没有指定一个,asp.net 会为您创建一个默认数据库。没有理由将此默认数据库与常规数据库分开使用。这就是为什么它有一个连接字符串。

会员资格的全部意义在于它很灵活,可以随心所欲地使用。

于 2012-04-25T15:19:37.967 回答
0

在登录页面上,该Page.User变量仍设置为匿名。如果您想在登录前验证角色,您可以构建自己的GenerpicPrincial

var principal = new GenericPrincipal(
    new GenericIdentity(username), 
    Roles.GetRolesForUser(username));
于 2013-03-21T17:14:40.853 回答