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

时间:2019-03-18 13:02:21

标签: database database-design

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

表格:

  • users
  • companies(相关列:id
  • projects(相关列:idcompany_id
  • jobs(相关列:idcompany_idproject_id

我要完成的方案是将特定的用户和/或用户分配给:

  • 公司内的所有项目(“辛迪被分配给公司内的所有项目和所有工作”)
  • 选择公司内的项目(“辛迪被分配给五个项目中的三个,并被分配给这三个项目中的所有职位”)
  • 项目中选定的工作(“辛迪在一个项目中被分配给十个工作中的五个,在另一个项目中被分配给两个工作”)

我考虑一个单独的permissions表,我在其中插入对相关作业的权限,并使用jobs表中的相关列来向上扩展权限。换句话说,如果用户拥有特定工作的权限,那么它也拥有父项目和母公司的权限。

SQL小提琴:http://sqlfiddle.com/#!9/74a4d3/2

1 个答案:

答案 0 :(得分:0)

以下是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))