我的数据库模式中包含业务对象,例如描述患者/医生关系的三个表:
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
});
OR 我应该为权限创建RBAC表,并为每个医生/患者关系保留并行的权限记录吗?并将其与数据库中的所有其他业务对象一起使用吗?示例:
permission_name | resource_id | user_id
--------------- | --------------- | -------------
patient:delete | <id of patient> | <id of doctor>
在我看来,保留并行的权限记录将增加数据库中的行数,并且很难维护。但是,它还提供了权限模块和业务模块之间的抽象。
我已经思考了几天,但我不确定哪是最好的选择。你觉得呢?