Я работаю над новым проектом, в котором будут содержаться некоторые подробные правила того, что пользователь может и не может получить / увидеть, с 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.