Blazor 服务器端:具有共享 [NotAuthorized] 视图的角色特定 [Authorized] 视图
Blazor Server-Side: Role specific [Authorized] view with shared [NotAuthorized] view
我在我的 blazor 服务器端应用程序中偶然发现了一个小问题,其中我有以下基础:
- 我已经使用
<AuthorizeView>
开发了一个应用程序供客户访问。
- 着陆页和所有内容都停在
<NotAuthorized>
区域内
- 登录后(通过消费卡)客户获得授权,
<Authorized>
区域可访问
我想到目前为止一切照常......
现在我必须更改我的应用程序以允许操作员也可以单独访问具有不同功能的应用程序,因此我执行了以下操作:
我向我的 ClaimsIdentity
添加了一个 ClaimTypes.Role
声明,其中包含客户角色 customer
和运营商角色 operator
我已将 Roles
属性添加到我的 <AuthorizeView>
现在我想知道,有谁知道是否可以为两个角色共享 <NotAuthorized>
区域,因为我无法向区域本身添加 Roles
属性...一般而言,<AuthorizeView>
是可能的。
问题是,我只想根据已验证用户的 Role
声明调整我的 <Authorized>
区域,而不是将我的 <NotAuthorized>
代码复制到另一个 <AuthorizeView>
这可能吗?
在此先致谢并致以最诚挚的问候
七叶草
您可以通过注入 SignInManager 来执行过程逻辑,而不是使用标签 - 试试这个,看看它是否适合您!
@using Microsoft.AspNetCore.Identity
@inject SignInManager<IdentityUser> SignInManager
@if (SignInManager.Context.User.IsInRole("admin"))
{
<p>AdminHTML here</p>
}
else if (SignInManager.Context.User.Identity.IsAuthenticated)
{
<p>Some HTML here</p>
}
else
{
<p>Not authorized goes here.</p>
}
可以在 Microsoft 的文档中找到更多信息 here,但是他们使用的方法在标准 Blazor 页面中对我不起作用,这就是我使用 SignInManager 的原因,此方法似乎适用于我.
我在我的 blazor 服务器端应用程序中偶然发现了一个小问题,其中我有以下基础:
- 我已经使用
<AuthorizeView>
开发了一个应用程序供客户访问。 - 着陆页和所有内容都停在
<NotAuthorized>
区域内 - 登录后(通过消费卡)客户获得授权,
<Authorized>
区域可访问
我想到目前为止一切照常......
现在我必须更改我的应用程序以允许操作员也可以单独访问具有不同功能的应用程序,因此我执行了以下操作:
我向我的
ClaimsIdentity
添加了一个ClaimTypes.Role
声明,其中包含客户角色customer
和运营商角色operator
我已将
Roles
属性添加到我的<AuthorizeView>
现在我想知道,有谁知道是否可以为两个角色共享 <NotAuthorized>
区域,因为我无法向区域本身添加 Roles
属性...一般而言,<AuthorizeView>
是可能的。
问题是,我只想根据已验证用户的 Role
声明调整我的 <Authorized>
区域,而不是将我的 <NotAuthorized>
代码复制到另一个 <AuthorizeView>
这可能吗?
在此先致谢并致以最诚挚的问候
七叶草
您可以通过注入 SignInManager 来执行过程逻辑,而不是使用标签 - 试试这个,看看它是否适合您!
@using Microsoft.AspNetCore.Identity
@inject SignInManager<IdentityUser> SignInManager
@if (SignInManager.Context.User.IsInRole("admin"))
{
<p>AdminHTML here</p>
}
else if (SignInManager.Context.User.Identity.IsAuthenticated)
{
<p>Some HTML here</p>
}
else
{
<p>Not authorized goes here.</p>
}
可以在 Microsoft 的文档中找到更多信息 here,但是他们使用的方法在标准 Blazor 页面中对我不起作用,这就是我使用 SignInManager 的原因,此方法似乎适用于我.