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

Get all roles of any user (yes, not currently logged one)

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

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

写函数没什么大不了的,但这个问题听起来不像是我应该解决的问题。

使用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);

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

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)中。显然这首先需要在数据库中添加。