2012-04-03 80 views
3

获取角色ID有没有什么办法让角色ID,而不直接从数据库得到?我知道我们可以得到角色名:如何在ASP.NET MVC

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

但我需要访问角色ID。

没有任何一个有任何想法?

+0

角色API不提供获取角色ID的方法。我想你可以创建一个自定义角色提供者。 – Tuan 2012-04-03 05:59:54

回答

2

号的角色提供没有有关数据源的知识。它可能是一个非常缓慢的Web服务或超级豪华的NoSQL数据库。提供者不知道你的db是主键。

当然。 SqlMembershipProvider呢。但让它暴露密钥可能会导致违反Liskovs Substitution Principle

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

+0

ASP.NET角色管理器有一个错误。尽管不允许重复角色,但角色之间有空白区域,并为不同的角色设置不同的空白区域,则允许它们,最后是具有相同名称的多个角色! – 2013-06-12 11:51:04

+0

这个错误是你允许有空格。 – jgauffin 2013-06-12 13:25:03

+0

但.NET应该截断多个单个空格并验证! – 2013-06-18 06:18:39

0

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

2

您必须aspnet_Roles表添加到您的模型,并使用查询(例如LINQ),以获得角色ID。你可以改变的MembershipProvider,但它需要更多的工作做。

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 

这会给你的2列列表用于特定用户的RoleIds和RoleName。

在现实中,你不应该试图做到这一点,因为是当一个角色ID暴露安全漏洞的可能性。您只应使用RoleNames并使用Membership和Roles方法来管理事情。

希望这有助于:)