获取任何用户的所有角色(是的,当前未记录的角色)

时间:2015-03-03 14:20:33

标签: c# asp.net simplemembership

在MVC应用程序中,管理员有一个用于管理用户的CRUD控制器。现在,需要扩展编辑部分的功能,并且它涉及添加多个角色依赖选项卡。它们取决于所查看用户的角色,而不是查看它们的管理员的角色。实现这一目标的最简单方法是将该用户的所有角色作为字符串数组(或类似字符串),但我如何实际获取这些角色。

是否有一种首选方法可以在SimpleMembership中获取单个用户的所有角色(基于他的UserId),或者我只需要在数据库中修补存储的函数,通过它拉那些?

编写函数并不是什么大不了的事,但这个问题听起来并不像我应该做的解决方法。

2 个答案:

答案 0 :(得分:3)

使用Roles.GetRolesForUser()方法https://msdn.microsoft.com/en-us/library/8h930x07(v=vs.110).aspx

string[] rolesArray = Roles.GetRolesForUser("username"); 

字符串是aspnetdb中包含的用户的用户名。

如果您想使用guid查找,可以尝试以下方法:

Guid userId; // ID of user - you can populate this somehow
MembershipUser memUser = Membership.GetUser(userId);
string[] roles = Roles.GetRolesForUser(memUser.UserName);

答案 1 :(得分:0)

这是我在问题中提到的存储过程:

CREATE FUNCTION GetUserRoles
(
    @UserId int
)
RETURNS TABLE 
AS
RETURN 
(
    SELECT
        r.RoleName
    FROM
        dbo.webpages_UsersInRoles uir
        JOIN dbo.webpages_Roles r ON (r.RoleId = uir.RoleId)
    WHERE
        uir.UserId = @UserId
)
GO

除了user1666620的答案之外,唯一的理由是,如果你想跳过一个不必要的查询到数据库。使用此解决方案的首选方法是将此函数添加到dbml(或其等效的EF)。显然,首先需要在数据库中添加。