ASP .NET 5 MVC 6 Identity 3 Roles Claims Groups [关闭]

Posted

技术标签:

【中文标题】ASP .NET 5 MVC 6 Identity 3 Roles Claims Groups [关闭]【英文标题】:ASP .NET 5 MVC 6 Identity 3 Roles Claims Groups [closed] 【发布时间】:2015-07-10 02:24:07 【问题描述】:

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

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

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

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

但是我缺少一个很好的示例/文档来使用它们。

对于MVC 5,我使用了这个例子:用户有很多组,一个组可以有很多角色(角色是源代码中类/函数的访问对象) ASP.NET Identity 2.0: Implementing Group-Based Permissions Management

这些要求的存在已经是一个工作示例,您不必重新发明***。

【问题讨论】:

Speedone,你找到解决方案 3:基于组的权限管理了吗? 【参考方案1】:

我们在同一条船上,当然除了源代码之外没有太多阅读......

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

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

services.AddAuthorization(options =>

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

我们定义了角色,为他们分配了 1 个或多个声明,并为用户分配了角色,从而允许根据相应的策略检查他们是否与控制器联系。

您可以像这样将IAuthorizationService 注入控制器或属性中:

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 是我这些东西的主要来源,对我来说是一本很好的入门书。祝你好运!

【讨论】:

【参考方案2】:

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

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

【讨论】:

【参考方案3】:

这个帖子帮助我完成了一些工作,但遗憾的是没有更好的文档记录。

这是我改进的尝试。 Asp.net.Identity (3.0.0.0-rc1-final)

在 Startup.cs --> ConfigurationServices

        //Define your policies here, they are strings associated with claims types, that have claim strings... 
        //they need to be in AspNetUserClaims table, user id, department, Dev to be allowed access to the Dev policy
        //add the auth option, below that makes it work, and in the api controller, add the        
        //[Authorize("Dev")] attribute
        services.AddAuthorization(
            options =>
            
                options.AddPolicy("Dev", policy =>  policy.RequireClaim("department", "Dev"); );
            );
        services.AddMvc();

【讨论】:

以上是关于ASP .NET 5 MVC 6 Identity 3 Roles Claims Groups [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 ASP.NET 5 MVC 6 (vNext) 中定义 Identity 的密码规则?

在 Asp.net Identity MVC 5 中创建角色

Controller.User 在 ASP.NET MVC 5 上由 ASP.NET Identity 设置不一致

EF Core 中的 ASP.NET Core 5 MVC 和 Identity - 基于资源的授权

Configuring Autofac to work with the ASP.NET Identity Framework in MVC 5

ASP.NET MVC 5 中的简单角色管理器和授权,无需使用 Identity(CustomRoleProvider)