如何在ASP.NET MVC中获取RoleID

时间:2012-04-03 05:36:23

标签: asp.net asp.net-mvc asp.net-mvc-3 asp.net-membership roles

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

string[] allRoles = System.Web.Security.Roles.GetAllRoles();
string[] allRolesForUser = System.Web.Security.Roles.GetRolesForUser(httpContext.User.Identity.Name);

但我需要访问roleId。

有人对此有任何想法吗?

4 个答案:

答案 0 :(得分:2)

没有。角色提供程序不了解数据源。它可能是一个非常慢的Web服务或超豪华的NoSQL数据库。提供程序不知道您的数据库是主键。

不确定。 SqlMembershipProvider确实如此。但如果暴露密钥可能会导致违反Liskovs Substitution Principle

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

答案 1 :(得分:2)

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

答案 2 :(得分:0)

你做不到。 ASP.NET MVC不允许使用标准功能获得RoleId,您必须在角色名称的帮助下从数据库中获取它。

答案 3 :(得分:0)

我意识到这已经有几年了,但当我遇到它时,我发现没有人真正回答完全回答这个问题......所以我想我会发布一个完整的解决方案。

... SOOOO

简单地说:

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

这将为您提供特定用户的RoleIds和RoleNames的2列列表。

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

希望这会有所帮助:)