我想集中基于角色的授权

问题描述 投票:0回答:1

我正在向我的 Razor 页面添加授权。我从定义角色的 [Authorize] 属性开始。这正如预期的那样。但是,我不想在每个页面上都放置一个 Authorize 属性,而是希望将其集中起来以使其更易于管理。

一些背景知识。我们使用 AAD 进行身份验证,我使用的是 Microsoft Identity。如果用户没有访问权限,我不能只是“取消身份验证”,因为这会将他们从在其他一百个地方使用的身份中注销。

此应用程序位于 Azure 中,因此我创建了角色并将必要的 AAD 组分配给角色。我在一家非常大且繁琐的国际公司,对 AAD 进行更改非常困难,并且涉及牺牲身体的一部分,所以我宁愿不走那条路。

我有一些页面组,我想根据分配的角色对用户进行授权,并认为我可以在

Program.cs
中定义它。我还有 2-3 组文件夹,我也想以这种方式管理。我想创建一项包含某些角色的策略。然后该策略将在
AuthorizeFolder
方法中使用;它不起作用。尽管“Goofball”不是一个定义的角色,但没有抛出任何错误,我可以访问这些页面。我还尝试将角色名称添加到字符串数组并将其传递给
AuthorizeFolder
,而不是单个字符串。没有区别。

builder.Services.AddAuthorization(options =>
{
    options.AddPolicy("BasicAccess", policy => policy.RequireRole("Goofball"));
});

builder.Services.AddRazorPages(options =>
{
        options.Conventions.AuthorizeFolder("/Pages", "BasicAccess" );
});

有什么建议吗?

authorization blazor-server-side user-roles
1个回答
0
投票

我的两个建议是:

  1. 使用政策[如果您还没有这样做]。从你的问题中我不确定。策略比角色灵活得多。

  2. 使用

    ComponentBase
    的继承来创建具有正确授权的基本页面,然后从中继承您的页面。

这是一个例子。

[Authorize(Policy = "AdminPolicy")]
public class AdminComponentBase : ComponentBase { }
© www.soinside.com 2019 - 2024. All rights reserved.