ASP .NET 5 MVC 6身份3角色声明组如何实现?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (52)

我目前正在寻找一种解决方案,以便在身份识别系统3中使用ASP .NET 5 MVC 6中的高级角色/组权限管理功能。我开始了一个带有集成式简易登录系统的新的预览Starter Web项目。

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

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

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

但我错过了一个很好的示例/文档来使用它们。

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

对于这些需求已经存在一个工作示例,不必重新发明轮子。

提问于
用户回答回答于

如果你正在寻找一个示例项目,那么目前没有那么多。首先要看的是aspnet GitHub项目页面。

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

用户回答回答于

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

可以在Startup.cs,ConfigureServices中定义策略:

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

我们定义了角色,为他们分配了一个或多个声明,并将角色分配给用户,以允许他们根据适当的策略对控制器进行检查。

你可以注入IAuthorizationService到Controller或Attribute中,如下所示:

public class SalesDashboardController: Controller
{
    private readonly IAuthorizationService _authz;

    public VarianceOverviewController(IAuthorizationService authz)
    {
        _authz = authz;
    }
    ...
}

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

if (await _authz.AuthorizeAsync(User, "SalesSenior"))
{
    // User is authorized            
}

这篇文章是我的主要来源,对我来说是一个很好的入门书。

扫码关注云+社区

领取腾讯云代金券