简单的用户权限数据库结构



我正在寻找有关用户权限的数据库结构的正确解决方案。

表:

  • users
  • companies(相关列:id
  • projects(相关列:idcompany_id
  • jobs(相关列:idcompany_idproject_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)) 

最新更新