我正在开发一个新项目,该项目将对 Identity Server 4 的用户可以访问/查看的内容有一些深入的策略。
我正在尝试将 AuthorizeView 与策略一起使用来隐藏导航中的选项,但是视图是级联的,这意味着我有这样的东西:
<MatNavMenu>
<MatNavItem Href="/home" Title="Home"><MatIcon Icon="@MatIconNames.Home"></MatIcon> Home</MatNavItem>
<MatNavItem Href="/claims" Title="Claims"><MatIcon Icon="@MatIconNames.Vpn_key"></MatIcon> Claims</MatNavItem>
<AuthorizeView Policy="@PolicyNames.IdentitySystemAccess">
<Authorized>
<AuthorizeView Policy="@PolicyNames.AccessManagement">
<Authorized>
<MatNavSubMenu @bind-Expanded="@_accessSubMenuState">
<MatNavSubMenuHeader>
<MatNavItem AllowSelection="false"> Access Management</MatNavItem>
</MatNavSubMenuHeader>
<MatNavSubMenuList>
<AuthorizeView Policy="@PolicyNames.User">
<Authorized>
<MatNavItem Href="users" Title="users"><MatIcon Icon="@MatIconNames.People"></MatIcon> Users</MatNavItem>
</Authorized>
</AuthorizeView>
<AuthorizeView Policy="@PolicyNames.Role">
<Authorized>
<MatNavItem Href="roles" Title="roles"><MatIcon Icon="@MatIconNames.Group"></MatIcon> Roles</MatNavItem>
</Authorized>
</AuthorizeView>
</MatNavSubMenuList>
</MatNavSubMenu>
</Authorized>
</AuthorizeView>
</Authorized>
</AuthorizeView>
我检查了用户登录后是否存在满足定义的策略所需的声明,但由于某种原因 AuthorizeView 不起作用。
我已更新我的 App.Razor 以使用 AuthorizeRouteView。关于为什么会发生这种情况的任何想法?
注意:我正在使用分配给角色的声明,但这些声明是动态的,我不能在我的策略中使用 policy.RequireRole("my-role"),因此使用:
options.AddPolicy(PolicyNames.User, b =>
{
b.RequireAuthenticatedUser();
b.RequireClaim(CustomClaimTypes.User, "c", "r", "u", "d");
});
当我的应用程序运行时,菜单中的任何项目都不会显示,除了不受 AuthorizeView 保护的主页和声明项目。