簡體   English   中英

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

[英]ASP.Net MVC List of User and their Roles

我正在使用ASP.NET MVC默認項目。 在那里,我們有一個名為AspNetRoles的數據庫(定義了諸如Admin,User之類的角色)
角色數據庫

然后有一個名為AspNetUsers的數據庫,它在您注冊用戶時定義了用戶 用戶數據庫

最后也是最重要的是AspNetUserRoles 當您將角色分配給用戶時,此處是放置它的位置(並且ID被散列)

UserRole數據庫

我的問題是,如何獲得系統上每個用戶及其角色的列表? 我不知道如何開始這樣做。 我應該創建自己的用戶和角色數據庫,而忽略默認數據庫嗎? 還是有一種使用默認值創建的方法?


另外,我要記住,到目前為止,我正在注冊時分配角色(默認情況下為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM