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
}
我正在使用 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
}