如何在ASP.NET MVC中获取RoleID

如何在ASP.NET MVC中获取RoleID,asp.net,asp.net-mvc,asp.net-mvc-3,asp.net-membership,roles,Asp.net,Asp.net Mvc,Asp.net Mvc 3,Asp.net Membership,Roles,有没有办法不直接从DB获取角色ID?我知道我们可以通过以下方式获取角色名称: string[] allRoles = System.Web.Security.Roles.GetAllRoles(); string[] allRolesForUser = System.Web.Security.Roles.GetRolesForUser(httpContext.User.Identity.Name); 但我需要访问roleId 有人知道吗?没有。角色提供程序不知道数据源。它可以是非常慢的web服

有没有办法不直接从DB获取角色ID?我知道我们可以通过以下方式获取角色名称:

string[] allRoles = System.Web.Security.Roles.GetAllRoles();
string[] allRolesForUser = System.Web.Security.Roles.GetRolesForUser(httpContext.User.Identity.Name);
但我需要访问roleId


有人知道吗?

没有。角色提供程序不知道数据源。它可以是非常慢的web服务,也可以是超级豪华的NoSQL数据库。提供程序不知道您的数据库是否为主键

当然。SqlMembershipProvider不支持。但让它公开密钥可能会导致违反法律


角色名称应该是唯一的。因此,您自己应该能够从数据库中获取它。或者,为什么不能直接使用角色名而不是db键呢?

你不能。ASP.NET MVC不允许使用标准函数获取RoleId,您必须借助角色名称从数据库中获取它。

您必须将aspnet_Roles表添加到您的模型中,并使用查询(例如LINQ)获取RoleId。您可以更改MembershipProvider,但需要做更多的工作。

我意识到这已经有几年历史了,但是当我碰到它的时候,我发现没有人能完全回答这个问题……所以我想我会发布一个完整的解决方案

太好了

简言之:

SELECT RoleId, RoleName FROM aspnet_Roles;
GO
但要为用户获取RoleIds,它是这样的:

SELECT UR.RoleID, R.RoleName FROM
aspnet_Users U, aspnet_Roles R, aspnet_UsersInRoles UR 
WHERE U.UserName = @Username 
AND UR.UserId = U.UserId 
AND UR.RoleID = R.RoleId
GO
这将为您提供一个特定用户的RoleID和RoleName的2列列表

事实上,您不应该尝试这样做,因为当RoleId被暴露时,存在潜在的安全漏洞。您应该只使用RoleNames,并使用Membership和Roles方法来管理事务


希望这有帮助:)

角色API没有提供获取角色ID的方法。我想您可以创建一个自定义角色提供程序。ASP.NET角色管理器有一个bug。虽然不允许重复角色,但如果角色之间有空格,并且为不同的角色放置不同的空格,则允许重复角色,最后是同名的多个角色!错误在于您允许使用空格。但是.NET应该将多个空格截断为单个空格并进行验证!为什么?这是你的业务规则,而不是会员资格提供者。或者该规则列在文档中的任何地方?是.NET验证防止了角色重复,为什么不在这种情况下?