ASP.Net 用户及其角色的 MVC 列表

ASP.Net MVC List of User and their Roles

我正在使用 ASP.NET MVC 默认项目。在那里我们有一个名为 AspNetRoles 的数据库(定义管理员、用户等角色)

然后有一个名为 AspNetUsers 的数据库,它只是在您注册时定义用户

最后也是最重要的是 AspNetUserRoles。当您将角色分配给用户时,这里就是它的放置位置(并且 ID 被散列)

我的问题是,如何获得系统中每个用户及其角色的列表?我不知道如何开始这样做。我是否应该创建自己的用户和角色数据库而忘记默认数据库?或者有没有一种使用默认方法创建的方法?


此外,我会记住,截至目前,我正在分配角色 注册(默认为用户),稍后当我创建索引时 我显示用户和角色列表,我想编辑它们,但是这个 只是一个免责声明。 非常感谢您的任何帮助。

获取系统中每个用户及其角色的列表:

SELECT        UserRoleId, UserId, RoleId, dbo.GetRoleName(RoleId) AS RoleName
FROM            dbo.UserRoles

函数:dbo.GetRoleName-

function [dbo].[GetRoleName](@input int)
Returns Nvarchar(500)
As
Begin
Declare @RoleName nvarchar(500)
Set @RoleName=(select Name from Roles where RoleId=@input)
return @RoleName
End

没有用于检索用户及其角色列表的内置方法,因此您可以尝试获取用户及其角色,如下所示(使用 EF):

var list = context.Users        
    .Where(x => x.Roles.Select(a => a.Id))
    .ToList();

使用它您可以获得每个用户和分配的角色。

更新 首先创建如下模型:

public class UserRoleInfo
{
    public ApplicationUser User { set; get; }
    public List<string> Roles { set; get; } 
}

那么你的查询就像(查询语法):

var listOfUsers = (from u in db.Users
             let query = (from ur in db.Set<IdentityUserRole>()
                          where ur.UserId.Equals(u.Id)
                          join r in db.Roles on ur.RoleId equals r.Id select r.Name)
                          select new UserRoleInfo() {User = u, Roles = query.ToList<string>()})
                         .ToList();

上面的查询将 return 每个用户都有他们的角色,无论有多少。

更新

你的观点是这样的:

@model UserRoleInfo
    <table>
        <tbody>
@foreach (var user in Model)
{
    var appUser = user.ApplicationUser;
    var roles = user.Roles;

            <tr>
                <td>
                    @appUser.Email
                </td>
                <td>
                    @string.Join(",", roles)
                </td>
            </tr>

}
        </tbody>
    </table>

我建议采用这种方式,因为这会将 return 数据库中的所有用户作为一个列表,并将其各自的角色附加到用户对象中。 此外,它使用预先加载角色实体,因此它将转换为数据库中的连接。

如果您只想接受一个用户及其角色,只需添加一个 where 条件并按其 ID 进行过滤。

var users = _applicationDbContext.Users.Include(x => x.Roles).ToList();
foreach (var applicationUser in users)
{
    var userRoles = applicationUser.Roles;
    //Do something with this user roles
}