一个web项目中要用到用户的权限管理,特意做了一个用户授权管理的POC,分享一下:
涉及到的对象有:
1. 用户:User
2. 部门:Department
3. 角色:Role
4. 受管控的对象:ObjectClass
5. 受管控的操作:Operator
关联关系:
1. 1个用户可以隶属于多个部门
2. 1个用户在一个部门有多个角色
3. 每个角色的权限相同,每个角色拥有多个对象的多个操作权限
4. 不同部门之间的角色不能共享权限,比如【用户A】在【A部门】有【经理】的角色,在【B部门】有【开发】的角色,那么在【B部门】的资源库中他只有【开发】这个角色对应的权限,而没有【经理】的权限。
基于上面的需求创建出如下的数据库表:(MYSQL)
CREATE TABLE IF NOT EXISTS COM_PRO_JUSER ( `ID` INT(11) NOT NULL AUTO_INCREMENT,`NAME` VARCHAR (50) NULL,PRIMARY KEY (`ID`)) COLLATE='utf8_bin' ENGINE=InnoDB AUTO_INCREMENT=1;
CREATE TABLE IF NOT EXISTS COM_PRO_JDEPARTMENT ( `ID` INT(11) NOT NULL AUTO_INCREMENT,`NAME` VARCHAR (50) NULL,PRIMARY KEY (`ID`)) COLLATE='utf8_bin' ENGINE=InnoDB AUTO_INCREMENT=1;
CREATE TABLE IF NOT EXISTS COM_PRO_JROLE ( `ID` INT(11) NOT NULL AUTO_INCREMENT,`NAME` VARCHAR (50) NULL,PRIMARY KEY (`ID`)) COLLATE='utf8_bin' ENGINE=InnoDB AUTO_INCREMENT=1;
CREATE TABLE IF NOT EXISTS COM_PRO_JOBJECTCLASS ( `ID` INT(11) NOT NULL AUTO_INCREMENT,`NAME` VARCHAR (50) NULL,PRIMARY KEY (`ID`)) COLLATE='utf8_bin' ENGINE=InnoDB AUTO_INCREMENT=1;
CREATE TABLE IF NOT EXISTS COM_PRO_JOPERATOR ( `ID` INT(11) NOT NULL AUTO_INCREMENT,`NAME` VARCHAR (50) NULL,PRIMARY KEY (`ID`)) COLLATE='utf8_bin' ENGINE=InnoDB AUTO_INCREMENT=1;
CREATE TABLE IF NOT EXISTS COM_PRO_JROLEOBJECTCLASS ( `ID` INT(11) NOT NULL AUTO_INCREMENT,`NAME` VARCHAR (50) NULL,`ROLEID` INT (10) NULL,`OBJECTCLASSID` INT (10) NULL,`OPERATORID` INT (10) NULL,PRIMARY KEY (`ID`)) COLLATE='utf8_bin' ENGINE=InnoDB AUTO_INCREMENT=1;
CREATE TABLE IF NOT EXISTS COM_PRO_JUSERROLE ( `ID` INT(11) NOT NULL AUTO_INCREMENT,`USERID` INT (10) NULL,`ROLEID` INT (10) NULL,`DEPARTMENTID` INT (10) NULL,PRIMARY KEY (`ID`)) COLLATE='utf8_bin' ENGINE=InnoDB AUTO_INCREMENT=1;
总共7张表,5张表分别对应到上面提到的5个涉及到的对象,还有2个对应关系表:
1. 用户部门角色映射表(USER_ID, DEPARTMENT_ID, ROLE_ID)
2. 角色对象操作映射表 (ROLE_ID, OBJECTCLASS_ID, OPERATOR_ID)
数据库设计好了之后就是UI的设计与开发了。UI的代码比较多,就不上传了,如果你想要源码的话请联系我.
用截图看下效果:
添加用户:
所有用户:
所有部门:
所有角色:
所有对象:
所有操作:
角色权限查看:
角色权限修改:
添加用户部门角色:
所有用户部门角色:
查看用户各部门的角色
查看用户各部门的角色的权限:
差不多就这么多了,谢谢。