gpt4 book ai didi

c# - 在 ASP.NET Core Identity 中检查具有 Authorize 属性的多个策略之一

转载 作者:太空狗 更新时间:2023-10-30 00:48:21 25 4
gpt4 key购买 nike

我在 ASP.NET Core 应用程序中设置了标准身份验证系统。

Users, Roles, RoleClaims(充当权限)

在 Startup.cs 中,我为每个角色和每个权限创建了一个策略。假设这会给我的 View 提供完全的灵 active ,以便能够说我希望此按钮显示用户是否属于已声明 DeleteCustomer 的角色,或者用户是否属于角色 super 用户。

如何使用 Authorize 属性执行 OR 条件。例如,在我的整个网站中,我希望 SuperuserRole Policy 对所有内容都具有完全权限。

假设我有以下操作方法:

[授权(政策=“EditCustomer”)]

这将要求将登录用户分配给具有声明的角色:Edit.Customer,因为我正在为声明 Edit.Customer 创建策略。这一切都很好,但我怎么说我希望任何具有 super 用户角色的用户都能够访问 EditCustomer 操作方法。 super 用户作为角色在数据库中,并作为名为 RequireSuperUser 的策略添加。

最佳答案

您可以在 Startup.cs 中添加 OR 条件:

services.AddAuthorization(options => {
options.AddPolicy("EditCustomer", policy =>
policy.RequireAssertion(context =>
context.User.HasClaim(c => (c.Type == "DeleteCustomer" || c.Type == "Superuser"))));
});

我遇到了类似的问题,我只希望“John Doe”、“Jane Doe”用户查看“Ending Contracts”屏幕,或者只有“MIS”部门的任何人也能够访问同一屏幕。以下对我有用,我声明类型为“部门”和“用户名”:

services.AddAuthorization(options => {
options.AddPolicy("EndingContracts", policy =>
policy.RequireAssertion(context => context.User.HasClaim(c => (c.Type == "department" && c.Value == "MIS" ||
c.Type == "UserName" && "John Doe, Jane Doe".Contains(c.Value)))));
});

关于c# - 在 ASP.NET Core Identity 中检查具有 Authorize 属性的多个策略之一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47209470/

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