RBAC-我应该在数据库中放置权限还是对其进行硬编码?

时间:2019-07-09 14:35:42

标签: security authorization rbac

我的数据库模式中包含业务对象,例如描述患者/医生关系的三个表:

doctor        doctor_patient_relation       patient
---------     -----------------------       ----------
id        <-  doctor_id                |--> id
name: str     patient_id --------------|    name: str
              is_main_doctor: bool

规则是:

  • 如果您是与该患者有医生/患者关系的医生,则可以patient:viewpatient: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
});

OR 我应该为权限创建RBAC表,并为每个医生/患者关系保留并行的权限记录吗?并将其与数据库中的所有其他业务对象一起使用吗?示例:

permission_name | resource_id     |  user_id
--------------- | --------------- | -------------
patient:delete  | <id of patient> | <id of doctor>

在我看来,保留并行的权限记录将增加数据库中的行数,并且很难维护。但是,它还提供了权限模块和业务模块之间的抽象。

我已经思考了几天,但我不确定哪是最好的选择。你觉得呢?

0 个答案:

没有答案