asp.net - ASP .NET 5 MVC 6 Identity 3 角色声明组

标签 asp.net asp.net-mvc asp.net-core asp.net-core-mvc asp.net-identity-3

我目前正在寻找一种解决方案,以便在带有 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: Implementing Group-Based Permissions Management

满足这些要求已经是一个可行的示例,您不必重新发明轮子。

最佳答案

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

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

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

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

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

您可以将 IAuthorizationService 注入(inject)到 Controller 或属性中,如下所示:

public class SalesDashboardController: Controller
{
    private readonly IAuthorizationService _authz;

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

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

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

This article是我这些东西的主要来源,对我来说是一个很好的入门读物。祝你好运!

关于asp.net - ASP .NET 5 MVC 6 Identity 3 角色声明组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29966792/

相关文章:

ASP.NET:如何处理并行请求

asp.net - 将 CSS 模板应用于包含内容/控件的 ASP 页面

asp.net-mvc - 从 MVC Controller 调用 Web API 来构建和传递模型以查看

c# - 在 catch block 中的 RedirectToAction 之后,TempData 为空。可能是什么原因?

asp.net-core - ASP.NET Core 2 - 如何删除脚手架路由?

c# - 请求发现码头时出错(需要 HTTPS)

ASP.NET 日期正则表达式验证器 99/99/2012

asp.net - 在 mvc View 中使用 appsetting 键和字符串

asp.net-mvc - 没有为此对象定义无参数构造函数。注入(inject) + MVC 5

json - 为 appsettings.json 引用单独的连接字符串文件?