2017-09-19 53 views
1

我正在使用ASP.NET MVC默认项目。在那里,我们有一个名为AspNetRoles数据库(定义Admin之类的,用户角色)
Role DatabaseASP.Net MVC用户及其角色列表

然后有一个叫AspNetUsers数据库时,你将它们注册User Database

这只是定义了用户,最后和最重要的是AspNetUserRoles。当您将角色分配给这里的用户是在其被放置(和ID是散列)

​​

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


另外,我会记住,截至目前,我分配角色时 注册(默认用户),后来当我创造一个 我展示用户和角色的列表中的索引,我将要编辑它们,但这个 只是一个免责声明。 非常感谢您提供任何形式的帮助。

+0

每个用户的角色列表?或者登录的用户? – Valkyrie

+0

每个用户的列表。 – HighSepton

+0

'SELECT * FROM AspNetUsers'可能是一个好的开始......你在这里不明白什么? *我是否应该创建自己的用户和角色数据库*呃?为什么?你有什么问题? – Liam

回答

3

有没有内置的方法来检索列表用户与他们的角色,以便您可以尝试获取用户和他们的角色(如使用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(); 

查询将返回每个用户在他们的角色没有事关多少。

UPDATE

你的看法是这样的:

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

我忘了告诉,但是,我正在使用实体框架。而这种方法不会工作,因为它会显示Id(哈希ID),这不是很令人愉快。 – HighSepton

+0

*显示Id(哈希ID),这不是很令人愉快。*那么不显示它呢?! – Liam

+0

是的,更新标签 – Liam

-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 [email protected]) 
return @RoleName 
End 
+0

这是一个SQL函数吗?为什么要创建一个SQL函数来执行SELECT? SELECT有什么问题?或者也许INNER JOIN? – Liam

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