В моей схеме БД есть бизнес-объекты, например, три таблицы, описывающие отношения пациент / врач:
doctor doctor_patient_relation patient
--------- ----------------------- ----------
id <- doctor_id |--> id
name: str patient_id --------------| name: str
is_main_doctor: bool
Правила:
- Вы можете
patient:view
и patient:edit
, если вы являетесь врачом, имеющим отношения врач / пациент к этому пациенту. - Вы можете
patient:delete
, если вы являетесь основным врачом для этого пациента.
Для моей системы RBAC, я должен просто жестко кодировать правила в моей системе?Например, так (псевдокод):
route.DELETE('/patient/delete/:patientId', (req) => {
if (req.user.hasRole('doctor') && req.user.patientRelations.where(patientRel.patient_id == req.patientId)) {
return true; // can perform action
}
else return false; // unauthorized
});
ИЛИ я должен составить таблицы RBAC для разрешений и вести параллельный учет разрешений для каждого отношения врач / пациент?И сделать это со всеми другими бизнес-объектами в моей БД?Пример:
permission_name | resource_id | user_id
--------------- | --------------- | -------------
patient:delete | <id of patient> | <id of doctor>
Мне просто кажется, что ведение параллельных записей разрешений увеличит количество строк в моей БД и будет трудно поддерживать.Тем не менее, он также обеспечивает абстракцию между модулем разрешений и бизнес-модулями.
Я размышлял об этом в течение нескольких дней, и я совершенно не уверен, что это лучший вариант.Что ты думаешь?