有没有办法获得RoleId而不直接从DB获取?我知道我们可以通过以下方式获得角色名称:
string[] allRoles = System.Web.Security.Roles.GetAllRoles();
string[] allRolesForUser = System.Web.Security.Roles.GetRolesForUser(httpContext.User.Identity.Name);
但我需要访问roleId。
有人对此有任何想法吗?
答案 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方法来管理事物。
希望这会有所帮助:)