ASP .NET 5 MVC 6身份3角色声明组

spe*_*one 17 asp.net asp.net-mvc asp.net-core-mvc asp.net-identity-3 asp.net-core

我目前正在寻找一种解决方案,使用带有Identity 3的ASP .NET 5 MVC 6中的高级角色/组权限管理.我启动了一个带有集成的轻松登录系统的新预览启动Web项目.

现在我需要一个复杂的"用户权限管理",具有以下功能:

  1. 用户可以是多个组/角色
  2. 一个组/角色有很多访问对象(例如CanAccessUser,CanEditUser ......)
  3. 每个组/角色的这些访问对象(可能是声明?)相互补充
  4. (对于最终解决方案是可选的):另外=>访问对象(可能是声明)可以由组独立分配给用户

我已经看到这种身份已经广泛地为我提供了适合我的表结构.(例如AspNetUsers,AspNetUserRoles,AspNetRoles,AspNetRoleClaims),

但我错过了使用它们的好示例/文档.

对于MVC 5,我使用了这个示例:用户有许多组,一个组可以有多个角色(角色是类/函数源代码中的访问对象) ASP.NET Identity 2.0:实现基于组的权限管理

存在这些要求已经是一个工作示例,您不必重新发明轮子.

hal*_*y9k 5

我们在这里处于同一条船上,当然,除了来源之外,没有太多阅读……

我们最终实施了政策。策略是满足授权所需的一组声明。然后可以将这些策略应用于控制器。

您可以在 Startup.cs、ConfigureServices 中定义您的策略:

services.AddAuthorization(options =>
{
    options.AddPolicy("SalesSenior", policy =>
    {
        policy.RequireClaim("department", "sales");
        policy.RequireClaim("status", "senior");
    });
});
Run Code Online (Sandbox Code Playgroud)

我们定义了角色,为它们分配了 1 个或多个声明,并为用户分配了角色,以便在点击控制器时根据适当的策略检查它们。

您可以将其注入IAuthorizationService到控制器或属性中,如下所示:

public class SalesDashboardController: Controller
{
    private readonly IAuthorizationService _authz;

    public VarianceOverviewController(IAuthorizationService authz)
    {
        _authz = authz;
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

然后您可以使用来IAuthorizationService检查用户声明的有效性......

if (await _authz.AuthorizeAsync(User, "SalesSenior"))
{
    // User is authorized            
}
Run Code Online (Sandbox Code Playgroud)

这篇文章是我了解这些内容的主要来源,对我来说是一本很好的入门读物。祝你好运!


Muh*_*eed 0

如果您正在寻找示例项目,目前没有那么多。第一个查看的地方是aspnet GitHub 项目页面。

幸运的是,ASP.NET Identity 子项目有一个示例项目,您可以在此处查看,但它可能无法满足您的所有要求。请注意,这是使用最新的测试版。