权限管理系统(三):自定义开发一套权限管理系统
为什么需要自己写?
- 使用框架必须按照框架的要求进行配置。
- 没有界面操作和查看。
- 期望更细致的管理。
什么样的权限管理系统比较好?
- 基于扩展的RBAC实现。
- 易于扩展,能灵活适应需求的变化。
- 所有管理都有界面进行操作。
数据库表结构设计
这边使用的是mysql数据库。
/* Navicat MySQL Data Transfer Source Server : 本地 Source Server Version : 50611 Source Host : 127.0.0.1:3306 Source Database : rbac-test Target Server Type : MYSQL Target Server Version : 50611 File Encoding : 65001 Date: 2017-11-20 14:51:34 */ SET FOREIGN_KEY_CHECKS=0; -- ---------------------------- -- Table structure for t_acl -- ---------------------------- DROP TABLE IF EXISTS `t_acl`; CREATE TABLE `t_acl` ( `id` int(11) NOT NULL AUTO_INCREMENT, `code` varchar(20) NOT NULL COMMENT '权限码', `aname` varchar(25) NOT NULL, `acl_module_id` int(11) NOT NULL, `url` varchar(110) NOT NULL COMMENT '请求的url,可以填正则表达式', `type` int(11) NOT NULL DEFAULT '1' COMMENT '类型(1菜单 2按钮 3其它)', `isactive` int(11) NOT NULL DEFAULT '1' COMMENT '状态(0未启用 1启用)', `seq` int(11) NOT NULL COMMENT '权限在权限模块中的排序', `remark` varchar(54) DEFAULT NULL, `operator` varchar(20) DEFAULT NULL, `operate_time` datetime DEFAULT NULL, `operate_ip` varchar(20) DEFAULT NULL, PRIMARY KEY (`id`), KEY `fk_acl_module_id` (`acl_module_id`), CONSTRAINT `fk_acl_module_id` FOREIGN KEY (`acl_module_id`) REFERENCES `t_sys_acl_module` (`id`) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- ---------------------------- -- Table structure for t_role -- ---------------------------- DROP TABLE IF EXISTS `t_role`; CREATE TABLE `t_role` ( `id` int(11) NOT NULL AUTO_INCREMENT, `rname` varchar(25) NOT NULL, `type` int(11) NOT NULL DEFAULT '1' COMMENT '类型(0管理员 1检验员 2科室主任 3审核员 4打印员 5申报员 6其它)', `isactive` int(11) NOT NULL DEFAULT '1' COMMENT '状态(0未启用 1启用)', `remark` varchar(54) DEFAULT NULL, `operator` varchar(20) DEFAULT NULL, `operate_time` datetime DEFAULT NULL, `operate_ip` varchar(20) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- ---------------------------- -- Table structure for t_sys_acl_module -- ---------------------------- DROP TABLE IF EXISTS `t_sys_acl_module`; CREATE TABLE `t_sys_acl_module` ( `id` int(11) NOT NULL AUTO_INCREMENT, `amname` varchar(25) NOT NULL, `level` int(11) NOT NULL COMMENT '层级', `seq` int(11) NOT NULL COMMENT '排序', `remark` varchar(25) DEFAULT NULL, `parent_id` int(11) DEFAULT NULL, `operator` varchar(25) DEFAULT NULL, `operate_time` datetime DEFAULT NULL, `operate_ip` varchar(25) DEFAULT NULL, `isactive` int(11) DEFAULT '1' COMMENT '状态(0未启用 1启用)', PRIMARY KEY (`id`), KEY `fk_parent_id1` (`parent_id`), CONSTRAINT `fk_parent_id1` FOREIGN KEY (`parent_id`) REFERENCES `t_sys_acl_module` (`id`) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- ---------------------------- -- Table structure for t_sys_dep -- ---------------------------- DROP TABLE IF EXISTS `t_sys_dep`; CREATE TABLE `t_sys_dep` ( `id` int(11) NOT NULL AUTO_INCREMENT, `dname` varchar(25) NOT NULL, `level` int(11) NOT NULL COMMENT '层级', `seq` int(11) NOT NULL COMMENT '排序', `remark` varchar(25) DEFAULT NULL, `parent_id` int(11) DEFAULT NULL, `operator` varchar(25) DEFAULT NULL, `operate_time` datetime DEFAULT NULL, `operate_ip` varchar(25) DEFAULT NULL, PRIMARY KEY (`id`), KEY `fk_parent_id` (`parent_id`), CONSTRAINT `fk_parent_id` FOREIGN KEY (`parent_id`) REFERENCES `t_sys_dep` (`id`) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- ---------------------------- -- Table structure for t_sys_log -- ---------------------------- DROP TABLE IF EXISTS `t_sys_log`; CREATE TABLE `t_sys_log` ( `id` int(11) NOT NULL AUTO_INCREMENT, `type` int(11) NOT NULL DEFAULT '0' COMMENT '权限更新的类型(1部门 2用户 3权限模块 4权限 5角色 6角色用户关系 7角色权限关系)', `target_id` int(25) NOT NULL COMMENT '基于type后指定的对象id,比如用户、角色、权限等表的主键', `old_value` text, `new_value` text, `isactive` int(11) NOT NULL DEFAULT '1' COMMENT '状态(0未启用 1启用)', `operator` varchar(20) DEFAULT NULL, `operate_time` datetime DEFAULT NULL, `operate_ip` varchar(20) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- ---------------------------- -- Table structure for t_sys_role_acl_rel -- ---------------------------- DROP TABLE IF EXISTS `t_sys_role_acl_rel`; CREATE TABLE `t_sys_role_acl_rel` ( `id` int(30) NOT NULL AUTO_INCREMENT, `role_id` int(25) NOT NULL, `acl_id` int(12) DEFAULT NULL, `isactive` int(11) NOT NULL DEFAULT '1' COMMENT '状态(0未启用 1启用)', `operator` varchar(25) DEFAULT NULL, `operate_time` datetime DEFAULT NULL, `operate_ip` varchar(25) DEFAULT NULL, PRIMARY KEY (`id`), KEY `fk_role_id1` (`role_id`), KEY `fk_acl_id` (`acl_id`), CONSTRAINT `fk_acl_id` FOREIGN KEY (`acl_id`) REFERENCES `t_acl` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT `fk_role_id1` FOREIGN KEY (`role_id`) REFERENCES `t_role` (`id`) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- ---------------------------- -- Table structure for t_sys_user -- ---------------------------- DROP TABLE IF EXISTS `t_sys_user`; CREATE TABLE `t_sys_user` ( `id` int(30) NOT NULL AUTO_INCREMENT, `username` varchar(25) NOT NULL, `telphone` varchar(12) DEFAULT NULL, `mail` varchar(18) DEFAULT NULL, `password` varchar(10) NOT NULL, `remark` varchar(25) DEFAULT NULL, `dep_id` int(11) DEFAULT NULL, `isactive` int(11) NOT NULL DEFAULT '1' COMMENT '状态(0未启用 1启用)', `operator` varchar(25) DEFAULT NULL, `operate_time` datetime DEFAULT NULL, `operate_ip` varchar(25) DEFAULT NULL, PRIMARY KEY (`id`), KEY `fk_dep_id` (`dep_id`), CONSTRAINT `fk_dep_id` FOREIGN KEY (`dep_id`) REFERENCES `t_sys_dep` (`id`) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- ---------------------------- -- Table structure for t_sys_user_role_rel -- ---------------------------- DROP TABLE IF EXISTS `t_sys_user_role_rel`; CREATE TABLE `t_sys_user_role_rel` ( `id` int(30) NOT NULL AUTO_INCREMENT, `role_id` int(25) NOT NULL, `user_id` int(12) DEFAULT NULL, `isactive` int(11) NOT NULL DEFAULT '1' COMMENT '状态(0未启用 1启用)', `operator` varchar(25) DEFAULT NULL, `operate_time` datetime DEFAULT NULL, `operate_ip` varchar(25) DEFAULT NULL, PRIMARY KEY (`id`), KEY `fk_role_id` (`role_id`), KEY `fk_user_id` (`user_id`), CONSTRAINT `fk_user_id` FOREIGN KEY (`user_id`) REFERENCES `t_sys_user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT `fk_role_id` FOREIGN KEY (`role_id`) REFERENCES `t_role` (`id`) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8;