我目前正在寻找一种解决方案,以便在带有 Identity 3 的 ASP .NET 5 MVC 6 中使用高级角色/组权限管理。我启动了一个带有集成的简易登录系统的新预览入门 Web 项目。
现在我需要一个复杂的“用户权限管理”,具有以下功能:
- 用户可以属于多个组/角色
- 一个组/角色有许多访问对象(例如 CanAccessUser、CanEditUser...)
- 每个组/角色的这些访问对象(也许是声明?)相辅相成
- (最终解决方案可选):另外 => 访问对象(可能是声明)可以由组独立分配给用户
我已经看到身份已经广泛地提供了适合我的表结构。 (例如 AspNetUsers、AspNetUserRoles、AspNetRoles、AspNetRoleClaims),
但是我缺少一个很好的示例/文档来使用它们。
对于MVC 5,我使用了这个例子:用户有很多组,一个组可以有很多角色(角色是类/函数源代码中的访问对象) ASP.NET Identity 2.0: Implementing Group-Based Permissions Management
满足这些要求已经是一个可行的示例,您不必重新发明轮子。
最佳答案
我们在这里处于同一条船上,当然除了来源之外没有太多阅读......
我们最终实现了政策。策略是满足授权所需的一组声明。然后可以将这些策略应用于 Controller 。
您可以在 Startup.cs、ConfigureServices 中定义您的策略:
services.AddAuthorization(options =>
{
options.AddPolicy("SalesSenior", policy =>
{
policy.RequireClaim("department", "sales");
policy.RequireClaim("status", "senior");
});
});
我们定义了角色,为它们分配了 1 个或多个声明,并为用户分配了角色,以便在点击 Controller 时根据适当的策略检查它们。
您可以将 IAuthorizationService
注入(inject)到 Controller 或属性中,如下所示:
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是我这些东西的主要来源,对我来说是一个很好的入门读物。祝你好运!
关于asp.net - ASP .NET 5 MVC 6 Identity 3 角色声明组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29966792/