RBAC - я должен поставить разрешения в БД или жесткий код их? - PullRequest
0 голосов
/ 09 июля 2019

В моей схеме БД есть бизнес-объекты, например, три таблицы, описывающие отношения пациент / врач:

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>

Мне просто кажется, что ведение параллельных записей разрешений увеличит количество строк в моей БД и будет трудно поддерживать.Тем не менее, он также обеспечивает абстракцию между модулем разрешений и бизнес-модулями.

Я размышлял об этом в течение нескольких дней, и я совершенно не уверен, что это лучший вариант.Что ты думаешь?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...