Основываясь на документе Крис Пратт, я предлагаю вам использовать это разрешение:
Task<AuthorizationResult> AuthorizeAsync(ClaimsPrincipal user,
object resource,
IEnumerable<IAuthorizationRequirement> requirements);
Task<AuthorizationResult> AuthorizeAsync(ClaimsPrincipal user,
object resource,
string policyName);
У меня есть пример в View для отображения кнопки «View» для книги A, но не для книги B ниже:
Во-первых, у меня есть 3 роли («Администратор», «Пользователь», «Персонал») - администратор ролей может читать как книги А, так и В, но только сотрудники отдела могут читать книгу А. Затем, когда вход в систему для сотрудников, AuthorizationService будет проверьте разрешение «ЧИТАТЬ» и, если у этого сотрудника нет разрешения на чтение Книги B, кнопка «Просмотр» не появится:
@if ((await AuthorizationService.AuthorizeAsync(User, "STAFF", Operations.Read)).Succeeded)
{
<div>
<div class="input-group-btn">
<button id="btnRead" class="form-control btn-info">View</button>
</div>
</div>
}
И на странице Роль вам также нужна таблица для назначения каждого разрешения каждой книге. Вы используете учетную запись администратора, и для каждой роли есть дерево или таблица, отображающая все категории книг, в каждой категории книг будут установлены флажки «Читать», «Удалить», «Создать». Затем, если вы установите флажок «Удалить» bookB в роли «Staff», то все учетные записи сотрудников будут иметь разрешение на удаление книги B. Надеюсь, эта помощь!