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

时间:2017-09-19 09:07:01

标签: c# asp.net asp.net-mvc entity-framework asp.net-identity-2

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

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

最后也是最重要的是 AspNetUserRoles 。当您将角色分配给用户时,它就在这里放置(并且Id是经过哈希处理的)

UserRole Database

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

另外,我会记住,截至目前我正在分配角色  注册(默认情况下是用户)以及稍后我创建索引所在的位置  我显示了用户和角色列表,我想编辑它们,但是这个  只是一个免责声明。 非常感谢您提供任何类型的帮助。

3 个答案:

答案 0 :(得分:2)

没有内置方法可以检索具有角色的用户列表,因此您可以尝试获取用户及其角色,如下所示(使用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();

上面的查询将返回每个用户的角色,无论多少。

<强>更新

您的观点如下:

@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>

答案 1 :(得分:-1)

我建议采用这种方式,因为这会将所有用户从数据库返回为一个列表,其各自的角色附加在用户对象中。 此外,它使用热切加载Roles实体,因此它将转换为数据库中的连接。

如果您只想让一个用户及其角色在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
}

答案 2 :(得分:-4)

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

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