我正在寻找有关用户权限的数据库结构的正确解决方案。
表:
-
users
-
companies
(相关列:id
) -
projects
(相关列:id
,company_id
) -
jobs
(相关列:id
,company_id
,project_id
)
我想完成的方案是将特定用户和/或用户分配给:
- 公司内的所有项目("辛迪都分配给公司内的所有项目和所有工作")
- 公司内的选择项目("辛迪分配给五分之三,并分配给这三个项目中的所有工作")
- 项目中选定的作业("辛迪分配给一个项目中的五个工作,而另一个项目中的两个工作") )
我考虑了单独的permissions
表,我只将权限插入相关作业,并使用jobs
表中的相关列来向上级别的权限。换句话说 - 如果用户有权获得特定作业的权限,那么它也有父母项目和母公司的许可。
sql小提琴:http://sqlfiddle.com/#!9/74a4d3/2
这是permissions
的提议的表结构:
USER_ID OBJ_TYPE OBJ_ID PERMISSION
JDOE COMPANY 1 1-READONLY
JDOE COMPANY 2 2-READWRITE
JDOE PROJECT 1 2-READWRITE
然后检查用户访问的代码可能看起来像:
SELECT MAX(permission) FROM permissions
WHERE user_id = :USERID
AND ( (obj_type = 'JOB' and obj_id = :JOBID)
OR (obj_type = 'PROJECT' and obj_id = :PROJECTID)
OR (obj_type = 'COMPANY' and obj_id = :COMPANYID))