我正在寻找一个解决方案,使用ASP.NET 5 MVC 6中的高级角色/组权限管理与身份3.我启动了一个新的预览入门Web项目与一个集成的轻松登录系统。
>用户可以在多个组/角色
>一个组/角色有很多访问对象(例如CanAccessUser,CanEditUser …)
>每个组/角色的这些访问对象(也许是声明?)相互补充
>(最终解决方案可选):additional =>访问对象(可能是权利要求)可以由组独立地分配给用户
我已经看到这个身份已经广泛地提供了一个适合我的表结构。 (例如AspNetUsers,AspNetUserRoles,AspNetRoles,AspNetRoleClaims),
但是我错过了一个很好的例子/文档来使用它们。
对于MVC 5,我使用了这个例子:用户有很多组,一组可以有很多角色(角色是类/函数的源代码中的Access对象)
ASP.NET Identity 2.0: Implementing Group-Based Permissions Management
存在这些要求已经是一个工作的例子,你不必重塑轮子。
解决方法
我们在同一条船上,没有太多的阅读,除了来源当然…
我们最终实施政策。政策是授权满足要求的一组索赔。然后可以将这些策略应用于控制器。
您可以在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是我这个东西的主要来源,对我来说是一个很棒的起点。祝你好运!