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)