正在寻找在Blazor AuthorizeView组件中使用多个角色的更好方法



我正在开发一个使用Blazor和身份验证/授权的小型应用程序,在大多数情况下,基于角色的授权是完美的。然而,我有几个场景需要在AuthorizeView组件中授权多个角色,我不确定我是否以最佳方式授权。我试图避免将字符串值硬编码到组件中,所以我首先设置了一个静态类来管理字符串值,如下所示:

public static class Roles
{
public const string Admin = "Admin"; 
public const string CanManageClients = "CanManageClients"; 
public const string CanManageProjects = "CanManageProjects"; 
}

现在,我可以在任何需要的地方使用这些值,对于标准的基于属性的授权,我扩展了AuthorizeAttribute类,允许我根据需要传入多个值。现在我有一个[AuthorizeRoles]属性可以使用。到目前为止没有问题。我可以用这样的东西装饰整个页面:

@attribute [AuthorizeRoles(Roles.Admin, Roles.CanManageClients)]

以及根据需要的相关方法装饰:

[AuthorizeRoles(Roles.Admin, Roles.CanManageClients)]
public void DoTheThing()
{
//Doing things
}

然而,当涉及到Blazor AuthorizeView组件时,事情会变得棘手。Razor语法不允许我将多个角色链接在一起或插入字符串,所以我找到了一个解决方法:

<AuthorizeView Roles="@rolesList">
<Authorized>
//View related code once authorized
</Authorized>
</AuthorizeView>

以及生成组件期望的逗号分隔字符串的相关代码块:

@code {
string rolesList => $"{Roles.Admin}, {Roles.CanManageClients}";
}

这就像它应该做的那样,让我到达了我需要的地方,但对我来说,它看起来和感觉都很粗糙。我避免了可怕的魔术串场景,但在支持该组件的代码的另一部分,我有一个奇怪的后备字段。我知道我可以通过转移到基于策略或声明的系统来解决这个问题,但老实说,这对这个小应用程序来说太过分了,因为我只有少数用例。如果社区有任何反馈,我们将不胜感激,也许我没有考虑什么,也许这就是好的方式?

这可能有助于

<AuthorizeView Roles="@($"{Roles.Admin}, {Roles.CanManageClients}")">

相关内容

  • 没有找到相关文章

最新更新