在用户中进行高级搜索,角色e声称ASP.NET Core 2.0 Identity

时间:2017-11-10 13:20:53

标签: c# linq asp.net-core asp.net-identity advanced-search

从版本2.0开始,角色是可选的,这是一个非常好的主意,但是实现起来很混乱。 我不知道为什么像User.Roles和Roles.Claims这样的属性被删除了(现在我必须手动添加它,并且很多方法也被删除了......)到现在我太害怕了,但是这个自从创建ASP.NET身份以来,甚至在.NET Core之前,谁对这些属性进行了改编是非常糟糕的。

在此投诉之后,让我们继续问题。

我有一个可能有一个或多个角色的用户(IdentityUser)(IdentityRole)。角色可能有一个或多个主张。

我有一个表单,我可以通过他们的姓名,电子邮件,角色和声明来搜索用户。 字段名称和电子邮件是一个简单的输入。字段角色和声明是多个选择。

<input id="name" type="text" placeholder="Name">
<input id="email" type="text" placeholder="Email">
<select multiple id="select-role">
  <option>Choose one or more roles</option>
  <option>Admin</option>
  <option>Manager</option>
  <option>User</option>
</select>
<select multiple id="select-claim">
  <option>Choose one or more claims</option>
  <option>Can write users</option>
  <option>Can read users</option>
  <option>Can delete users</option>
  <option>Can write customers</option>
  <option>Can read customers</option>
  <option>Can delete customers</option>
</select>

要求:

  • 我可以搜索具有特定角色(一个或多个)的用户;
  • 我可以搜索具有特定声明(一个或多个)的特定声明(一个或多个)的用户;
  • 我可以搜索具有特定声明(一个或多个)的用户 - 声明属于角色,但用户未在搜索中提及任何角色

搜索示例及其所需结果:

My data:
Users  | Roles     | Claims    
John   | {A, B, C} | {{A1,A2,A3}, {B2,B3}, {C3}}
Mary   | {B, C}    | {{B2,B3}, {C3}}
Joseph | {C}       | {{C3}}

搜索具有角色A和B的用户。 结果必须是约翰和玛丽。

搜索具有角色A的用户。 结果必须只是约翰。

搜索具有角色C和声明1的用户。 结果必须但没有。

搜索具有角色A和B以及声明1和2的用户。 结果必须但只有约翰。

考虑到我从DB获得了这些列表:

  • 用户;
  • 角色;
  • 权利要求;
  • UsersInRole;
  • ClaimsInRole。

如何根据我的要求在这些列表中搜索内存?

------更新------

我的ApplicationUser类:

public class ApplicationUser : IdentityUser
{
    public string Name { get; set; }
    public string Status { get; set; }
}

0 个答案:

没有答案