17

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

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

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

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

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

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

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

4

3 回答 3

4

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

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

您可以在 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            
}

这篇文章是我这些东西的主要来源,对我来说是一本很好的入门书。祝你好运!

于 2015-12-17T01:47:52.133 回答
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();
于 2016-01-11T01:14:35.113 回答
0

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

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

于 2015-10-14T14:54:58.173 回答