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

时间:2015-04-30 11:41:13

标签: 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. (最终解决方案可选):另外=>访问对象(可能是声明)可以由一个组独立分配给用户
  5. 我已经看到这种身份已经广泛地为我提供了适合我的表结构。 (例如AspNetUsers,AspNetUserRoles,AspNetRoles,AspNetRoleClaims),

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

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

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

3 个答案:

答案 0 :(得分:4)

我们在同一条船上,在阅读方面没有太大的帮助......

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

您可以在Startup.cs,ConfigureServices:

中定义策略
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 } 检查用户声明的有效性......

{{1}}

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

这个帖子帮助我得到了一些有用的东西,但遗憾的是这没有更好的记录。

以下是我尝试改进的方法。 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();