В проекте asp.net core mvc я хочу создать новые роли пользователей и дать разрешение каждой роли для действий контроллера.
Допустим, у меня есть SchoolController
, внутри него у меня есть три метода
- CreateSchool
- UpdateSchool
- DeleteSchool
И скажем, у меня есть Admin
и Staff
роли.Я хочу предоставить доступ ко всем методам для Admin
и дать UpdateSchool
для Staff
.
Это означает, что администратор может создавать, обновлять, удалять школу.И сотрудники могут только UpdateSchool.
Я сохраню это разрешение ролей в базе данных, например
Role
----------------------------------------
RoleId Name
1 Admin
2 Staff
Module
----------------------------------------
ModuleId Name
1 SchoolController/CreateSchool
2 SchoolController/UpdateSchool
3 SchoolController/DeleteSchool
RoleModules (middle table for relation of roles and module )
----------------------------------------
RoleId ModuleId
1 1
1 2
1 3
2 2
Хорошо, допустим, у нас здесь 3 человека, Person_1, Person_2 и Person_3.
И у них разныетакие роли, как
Person_1 ( Admin )
Person_2 ( Staff )
Person_3 ( Staff )
Когда пользователи получают доступ к CreateSchool
действию контроллера, я хочу проверить, имеет ли текущий пользователь доступ к этому действию или нет.
[Authorize]
public async Task<IActionResult> CreateSchool(SchoolViewModel model)
{
//code to create school
}
Для этого мне следуетнужно использовать IAuthorizationHandler
'HandleRequirementAsync
?
Где мне получить информацию из базы данных и проверить запрос пользователя?
Есть ли какие-либо ссылки, которые соответствуют моему требованию ??
Примечание : Роли и модули будут динамически создаваться во время выполнения.
Обновление : я должен использовать ActionFilter
?( ссылка )