[英]ASP.Net MVC List of User and their Roles
我正在使用ASP.NET MVC默認項目。 在那里,我們有一個名為AspNetRoles的數據庫(定義了諸如Admin,User之類的角色)
然后有一個名為AspNetUsers的數據庫,它在您注冊用戶時定義了用戶
最后也是最重要的是AspNetUserRoles 。 當您將角色分配給用戶時,此處是放置它的位置(並且ID被散列)
我的問題是,如何獲得系統上每個用戶及其角色的列表? 我不知道如何開始這樣做。 我應該創建自己的用戶和角色數據庫,而忽略默認數據庫嗎? 還是有一種使用默認值創建的方法?
另外,我要記住,到目前為止,我正在注冊時分配角色(默認情況下為User),后來在創建顯示用戶和角色列表的索引時,我將要對其進行編輯,但這是只是免責聲明。 非常感謝您提供的任何幫助。
沒有內置的方法可以檢索具有其角色的用戶列表,因此您可以嘗試按以下方式獲取用戶及其角色(使用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>
我建議采用這種方式,因為這會將數據庫中的所有用戶作為列表返回,並在用戶對象中附加各自的角色。 此外,它在角色實體上急切地加載,因此它將轉換為數據庫中的聯接。
如果你想利用只有一個用戶及其角色,其中僅僅是一個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
}
獲取系統上每個用戶及其角色的列表:
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.