gpt4 book ai didi

asp.net-core - 使用 ASP.NET Core 2.1 Identity 进行基于权限的授权

转载 作者:行者123 更新时间:2023-12-04 05:38:03 25 4
gpt4 key购买 nike

过去,在 .NET Framework 上使用 ASP.NET MVC,我总是在内置的基于角色的授权之上实现基于权限的授权层。所谓“基于权限”,我的意思是将枚举权限列表分配给每个角色,并且在运行时,每个调用都会检查权限,而不是角色。

例如假设 OrdersController 上的 Post 方法需要 AddOrEditOrder 权限。在 Post 操作中看起来像 [MyAuthorize(MyRights.AddOrEditOrder)]。然后,您可以在其他地方配置只有经理和客户代表角色拥有该权利。

我一直认为这个小抽象层很容易实现并且大大提高了可维护性,即使权限到角色的映射仅从配置文件而不是 UI 更新。来自基于 Windows 的 IT 设置,这就是“正确完成方式”,IMO。

然而,转向 ASP.NET Core Identity,我们对 Claims 有了所有这些新奇的幻想。现在,我意识到 claim 和权利根本不是一回事。但是,你能否使用Claims,将它们分配给Roles,并有效地完成我上面描述的事情呢?

它显示基于您可以将声明分配给角色的数据库模式,并且您可以将角色分配给用户。因此,理论上,将声明“AddOrEditOrder”添加到“Manager”和“CustomerRep”角色会做我想做的事情。然后我将 [Authorize("AddOrEditOrder")] 放在 OrdersController 的 Post 操作上,中提琴,它会起作用!...对吧?

我可以这样使用 Claims & Roles 而无需严重的 sanfus 吗?

编辑:使用政策,而不是声明

As the helpful answer from @Ruard-van-Elburg suggests, I mistakenly wrote "Claims" where I meant "Policies". Substitute one for the other, and everything I said works. Another word for "Rights" is "Permissions", and there are some very useful suggestions in this related question and its top answer: How to implement Permission Based Access Control with Asp.Net Core

最佳答案

这不是声明的使用方式。声明应该模拟用户的身份,而不是权限。请看文章Identity vs Permissions进行一些解释。

在您的情况下,您可以使用 policies .

public void ConfigureServices(IServiceCollection services)
{
services.AddAuthorization(options =>
{
options.AddPolicy("AddOrEditOrder", policy =>
policy.RequireRole("Manager", "CustomerRep"));
});
}

并使用相同的属性:

[Authorize("AddOrEditOrder")]

还有很多其他选项可以添加authorization .您还可以查看 PolicyServer .

关于asp.net-core - 使用 ASP.NET Core 2.1 Identity 进行基于权限的授权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51883273/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com