概述
这里实现一个针对传统企业信息化系统的权限系统,要求如下:
- 实现用户信息管理。
- 实现企业信息管理。
- 实现部门信息管理。
- 实现岗位信息管理。
- 实现角色信息管理。
- 实现权限信息管理。
- 实现访客日志信息管理。
- 可以将用户归属到某一企业。
- 可以将用户归属到某一部门。
- 可以为用户按岗位分配权限。
- 可以为一类用户分配一组权限。
- 可以为同一用户按不同应用系统分配不同的权限。
- 可以为同一类用户按不同应用系统分配不同的权限。
- 可以为同一岗位按不同应用系统分配不同的权限。
- 可以实现数据的逻辑删除。
- 可以实现数据在特定业务场景下临时禁用不被修改。
设计
概述
按数据创建时间查询
考虑到部分业务场景下需要按数据创建时间查询,这里为所有数据定义了创建时间字段gmt_created
。
按数据修改时间查询
考虑到部分业务场景下需要按数据修改时间查询,这里为所有数据定义了修改时间字段gmt_modified
。
按数据创建人查询
考虑到部分业务场景下需要按数据创建人查询,这里为所有数据定义了创建人字段creator
。
按数据创建时间查询
考虑到部分业务场景下需要按数据修改人查询,这里为所有数据定义了修改人字段modifier
。
逻辑删除
考虑到部分业务场景下需要对数据做逻辑删除,这里为所有数据定义了逻辑删除字段deleted
,值为true
-代表数据已经删除,值为false
-代表数据尚未删除。
数据禁用
考虑到部分业务场景下需要对数据做禁用,这里为所有数据定义了数据禁用字段disabled
,值为true
-代表数据已经禁用,值为false
-代表数据尚未禁用。
数据说明
考虑到部分业务场景下需要对数据做说明,这里为所有数据定义了数据说明字段remark
,具体信息可以由用户自行录入。
业务表设计
略
实现
这里以当前最流行的mysql数据库为数据存储系统进行实施。
应用系统表
CREATE TABLE `sys_app` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID', `code` varchar(255) NOT NULL COMMENT '系统代码', `name` varchar(255) NOT NULL COMMENT '系统名称', `disabled` bit(1) DEFAULT b'0' COMMENT '是否已被禁用,y-已禁用,n-未禁用,其值决定记录是否可用,是否禁用性标记', `deleted` bit(1) DEFAULT b'0' COMMENT '是否已被锁定,,y-已锁定用,n-未锁定,其值决定记录是否可见,逻辑删除标记', `creator` int(11) DEFAULT NULL COMMENT '创建者', `gmt_created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `modifier` int(11) DEFAULT NULL COMMENT '修改者', `gmt_modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间', `remark` varchar(255) DEFAULT NULL COMMENT '备注', PRIMARY KEY (`id`), UNIQUE KEY `code_UNIQUE` (`code`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='应用系统表';
系统访问日志表
CREATE TABLE `sys_access_log` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID', `app_id` int(11) NOT NULL COMMENT '应用系统ID', `resource_id` int(11) NOT NULL COMMENT '资源ID', `visitor` int(11) NOT NULL COMMENT '访问者ID', `disabled` bit(1) DEFAULT b'0' COMMENT '是否已被禁用,y-已禁用,n-未禁用,其值决定记录是否可用,是否禁用性标记', `deleted` bit(1) DEFAULT b'0' COMMENT '是否已被锁定,,y-已锁定用,n-未锁定,其值决定记录是否可见,逻辑删除标记', `creator` int(11) DEFAULT NULL COMMENT '创建者', `gmt_created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `modifier` int(11) DEFAULT NULL COMMENT '修改者', `gmt_modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间', `remark` varchar(255) DEFAULT NULL COMMENT '备注', PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='系统访问日志表';
企业表
CREATE TABLE `sys_enterprise` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID', `name` varchar(255) NOT NULL COMMENT '企业名称', `legal_person` int(11) NOT NULL COMMENT '企业法人', `parent` int(11) DEFAULT NULL COMMENT '上级企业', `telephone` int(11) DEFAULT NULL COMMENT '联系电话', `province` int(11) NOT NULL COMMENT '所在省份', `city` int(11) NOT NULL COMMENT '所在地市', `county` int(11) NOT NULL COMMENT '所在区县', `address` varchar(255) NOT NULL COMMENT '详细地址', `disabled` bit(1) DEFAULT b'0' COMMENT '是否已被禁用,y-已禁用,n-未禁用,其值决定记录是否可用,是否禁用性标记', `deleted` bit(1) DEFAULT b'0' COMMENT '是否已被锁定,,y-已锁定用,n-未锁定,其值决定记录是否可见,逻辑删除标记', `creator` int(11) DEFAULT NULL COMMENT '创建者', `gmt_created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `modifier` int(11) DEFAULT NULL COMMENT '修改者', `gmt_modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间', `remark` varchar(255) DEFAULT NULL COMMENT '备注', PRIMARY KEY (`id`), UNIQUE KEY `name_UNIQUE` (`name`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='企业表';
部门表
CREATE TABLE `sys_department` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID', `name` varchar(255) NOT NULL COMMENT '部门名称', `manager` int(11) NOT NULL COMMENT '部门经理', `parent` int(11) DEFAULT NULL COMMENT '上级部门', `enterprise_id` int(11) NOT NULL COMMENT '企业ID', `province` int(11) DEFAULT NULL COMMENT '所在省份', `city` int(11) DEFAULT NULL COMMENT '所在地市', `county` int(11) DEFAULT NULL COMMENT '所在区县', `address` varchar(255) DEFAULT NULL COMMENT '详细地址', `disabled` bit(1) DEFAULT b'0' COMMENT '是否已被禁用,y-已禁用,n-未禁用,其值决定记录是否可用,是否禁用性标记', `deleted` bit(1) DEFAULT b'0' COMMENT '是否已被锁定,,y-已锁定用,n-未锁定,其值决定记录是否可见,逻辑删除标记', `creator` int(11) DEFAULT NULL COMMENT '创建者', `gmt_created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `modifier` int(11) DEFAULT NULL COMMENT '修改者', `gmt_modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间', `remark` varchar(255) DEFAULT NULL COMMENT '备注', PRIMARY KEY (`id`), UNIQUE KEY `name_UNIQUE` (`name`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='部门表';
用户表
CREATE TABLE `sys_user` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID', `user_id` int(11) NOT NULL, `real_name` varchar(64) DEFAULT NULL COMMENT '真实姓名', `department_id` int(11) DEFAULT NULL COMMENT '部门ID', `enterprise_id` int(11) DEFAULT NULL COMMENT '企业ID', `gender` bit(1) NOT NULL DEFAULT b'0' COMMENT '性别:true-男,false-女', `province` int(11) NOT NULL COMMENT '所在省份', `city` int(11) NOT NULL COMMENT '所在地市', `county` int(11) NOT NULL COMMENT '所在区县', `address` varchar(255) DEFAULT NULL COMMENT '详细地址', `disabled` bit(1) DEFAULT b'0' COMMENT '是否已被禁用,y-已禁用,n-未禁用,其值决定记录是否可用,是否禁用性标记', `deleted` bit(1) DEFAULT b'0' COMMENT '是否已被锁定,,y-已锁定用,n-未锁定,其值决定记录是否可见,逻辑删除标记', `creator` int(11) DEFAULT NULL COMMENT '创建者', `gmt_created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `modifier` int(11) DEFAULT NULL COMMENT '修改者', `gmt_modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间', `remark` varchar(255) DEFAULT NULL COMMENT '备注', PRIMARY KEY (`id`), UNIQUE KEY `user_id_UNIQUE` (`user_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户表';
账号表
CREATE TABLE `sys_account` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID', `user_id` int(11) NOT NULL, `user_name` varchar(64) NOT NULL COMMENT '用户名,用于登录系统', `password` varchar(128) NOT NULL COMMENT '当前密码', `mobile` varchar(11) NOT NULL COMMENT '手机号码,用于登录', `weixin` varchar(11) DEFAULT NULL COMMENT '微信账号,用于登录', `alipay` varchar(11) DEFAULT NULL COMMENT '支付宝账号,用于登录', `dingding` varchar(11) DEFAULT NULL COMMENT '钉钉账号,用于登录', `nick_name` varchar(64) DEFAULT NULL COMMENT '昵称', `mail` varchar(64) DEFAULT NULL COMMENT '电子邮箱', `disabled` bit(1) DEFAULT b'0' COMMENT '是否已被禁用,y-已禁用,n-未禁用,其值决定记录是否可用,是否禁用性标记', `deleted` bit(1) DEFAULT b'0' COMMENT '是否已被锁定,,y-已锁定用,n-未锁定,其值决定记录是否可见,逻辑删除标记', `creator` int(11) DEFAULT NULL COMMENT '创建者', `gmt_created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `modifier` int(11) DEFAULT NULL COMMENT '修改者', `gmt_modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间', `remark` varchar(255) DEFAULT NULL COMMENT '备注', PRIMARY KEY (`id`), UNIQUE KEY `user_id_UNIQUE` (`user_id`), UNIQUE KEY `user_name_UNIQUE` (`user_name`), UNIQUE KEY `mobile_UNIQUE` (`mobile`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='账号表';
岗位表
CREATE TABLE `sys_post` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '岗位ID', `name` varchar(255) NOT NULL COMMENT '岗位名称', `parent` int(11) DEFAULT NULL COMMENT '上级岗位(可选)', `enterprise_id` int(11) DEFAULT NULL COMMENT '企业ID', `disabled` bit(1) DEFAULT b'0' COMMENT '是否已被禁用,y-已禁用,n-未禁用,其值决定记录是否可用,是否禁用性标记', `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否已被锁定,,y-已锁定用,n-未锁定,其值决定记录是否可见,逻辑删除标记', `creator` int(11) DEFAULT NULL COMMENT '创建者', `gmt_created` timestamp NULL DEFAULT CURRENT_TIMESTAMP, `modifier` int(11) DEFAULT NULL, `gmt_modified` timestamp NULL DEFAULT CURRENT_TIMESTAMP, `remark` varchar(255) DEFAULT NULL COMMENT '备注', PRIMARY KEY (`id`), UNIQUE KEY `name_UNIQUE` (`name`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='岗位表';
资源表
CREATE TABLE `sys_resource` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID', `code` varchar(255) NOT NULL COMMENT '资源代码', `name` varchar(255) NOT NULL COMMENT '资源名称', `app_id` int(11) NOT NULL COMMENT '应用系统ID', `type` int(11) NOT NULL COMMENT '资源类型', `level` int(11) NOT NULL COMMENT '层级', `url` varchar(255) DEFAULT NULL COMMENT '资源路径', `order` int(11) NOT NULL COMMENT '显示次序,由小到大', `disabled` bit(1) DEFAULT b'0' COMMENT '是否已被禁用,y-已禁用,n-未禁用,其值决定记录是否可用,是否禁用性标记', `deleted` bit(1) DEFAULT b'0' COMMENT '是否已被锁定,,y-已锁定用,n-未锁定,其值决定记录是否可见,逻辑删除标记', `creator` int(11) DEFAULT NULL COMMENT '创建者', `gmt_created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `modifier` int(11) DEFAULT NULL COMMENT '修改者', `gmt_modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间', `remark` varchar(255) DEFAULT NULL COMMENT '备注', PRIMARY KEY (`id`), UNIQUE KEY `code_UNIQUE` (`code`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='资源表';
角色表
CREATE TABLE `sys_role` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID', `code` varchar(255) DEFAULT NULL COMMENT '角色代码', `name` varchar(255) DEFAULT NULL COMMENT '角色名称', `app_id` int(11) NOT NULL COMMENT '应用系统ID', `disabled` bit(1) DEFAULT b'0' COMMENT '是否已被禁用,y-已禁用,n-未禁用,其值决定记录是否可用,是否禁用性标记', `deleted` bit(1) DEFAULT b'0' COMMENT '是否已被锁定,,y-已锁定用,n-未锁定,其值决定记录是否可见,逻辑删除标记', `creator` int(11) DEFAULT NULL COMMENT '创建者', `gmt_created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `modifier` int(11) DEFAULT NULL COMMENT '修改者', `gmt_modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间', `remark` varchar(255) DEFAULT NULL COMMENT '备注', PRIMARY KEY (`id`), UNIQUE KEY `code_UNIQUE` (`code`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='角色表';
岗位-角色表
CREATE TABLE `sys_post_role` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID', `post_id` int(11) NOT NULL COMMENT '岗位ID', `role_id` int(11) NOT NULL COMMENT '角色ID', `app_id` int(11) NOT NULL COMMENT '应用系统ID', `disabled` bit(1) DEFAULT b'0' COMMENT '是否已被禁用,y-已禁用,n-未禁用,其值决定记录是否可用,是否禁用性标记', `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否已被锁定,,y-已锁定用,n-未锁定,其值决定记录是否可见,逻辑删除标记', `creator` int(11) DEFAULT NULL COMMENT '创建者', `gmt_created` timestamp NULL DEFAULT CURRENT_TIMESTAMP, `modifier` int(11) DEFAULT NULL, `gmt_modified` timestamp NULL DEFAULT CURRENT_TIMESTAMP, `remark` varchar(255) DEFAULT NULL COMMENT '备注', PRIMARY KEY (`id`), UNIQUE KEY `index_post_role` (`post_id`,`role_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='岗位-角色表';
角色_资源表
CREATE TABLE `sys_role_resource` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID', `role_id` int(11) NOT NULL COMMENT '角色ID', `resource_id` int(11) NOT NULL COMMENT '用户ID', `app_id` int(11) NOT NULL COMMENT '应用系统ID', `disabled` bit(1) DEFAULT b'0' COMMENT '是否已被禁用,y-已禁用,n-未禁用,其值决定记录是否可用,是否禁用性标记', `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否已被锁定,,y-已锁定用,n-未锁定,其值决定记录是否可见,逻辑删除标记', `creator` int(11) DEFAULT NULL COMMENT '创建者', `gmt_created` timestamp NULL DEFAULT CURRENT_TIMESTAMP, `modifier` int(11) DEFAULT NULL, `gmt_modified` timestamp NULL DEFAULT CURRENT_TIMESTAMP, `remark` varchar(255) DEFAULT NULL COMMENT '备注', PRIMARY KEY (`id`), UNIQUE KEY `index_role_resouce` (`role_id`,`resource_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='角色_资源表';
用户-岗位表
CREATE TABLE `sys_user_post` ( `id` int(11) NOT NULL AUTO_INCREMENT, `user_id` int(11) NOT NULL COMMENT '用户ID', `post_id` int(11) NOT NULL COMMENT '岗位ID', `disabled` bit(1) DEFAULT b'0' COMMENT '是否已被禁用,y-已禁用,n-未禁用,其值决定记录是否可用,是否禁用性标记', `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否已被锁定,,y-已锁定用,n-未锁定,其值决定记录是否可见,逻辑删除标记', `creator` int(11) DEFAULT NULL COMMENT '创建者', `gmt_created` timestamp NULL DEFAULT CURRENT_TIMESTAMP, `modifier` int(11) DEFAULT NULL, `gmt_modified` timestamp NULL DEFAULT CURRENT_TIMESTAMP, `remark` varchar(255) DEFAULT NULL COMMENT '备注', PRIMARY KEY (`id`), UNIQUE KEY `index_user_post` (`user_id`,`post_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户-岗位表';
用户-资源表
CREATE TABLE `sys_user_resource` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID', `user_id` int(11) NOT NULL COMMENT '用户ID', `resource_id` int(11) NOT NULL COMMENT '资源ID', `app_id` int(11) NOT NULL COMMENT '应用系统ID', `disabled` bit(1) DEFAULT b'0' COMMENT '是否已被禁用,y-已禁用,n-未禁用,其值决定记录是否可用,是否禁用性标记', `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否已被锁定,,y-已锁定用,n-未锁定,其值决定记录是否可见,逻辑删除标记', `creator` int(11) DEFAULT NULL COMMENT '创建者', `gmt_created` timestamp NULL DEFAULT CURRENT_TIMESTAMP, `modifier` int(11) DEFAULT NULL, `gmt_modified` timestamp NULL DEFAULT CURRENT_TIMESTAMP, `remark` varchar(255) DEFAULT NULL COMMENT '备注', PRIMARY KEY (`id`), UNIQUE KEY `index_user_resource` (`user_id`,`resource_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户-资源表';
用户-角色表
CREATE TABLE `sys_user_role` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID', `user_id` int(11) NOT NULL COMMENT '用户ID', `role_id` int(11) NOT NULL COMMENT '角色ID', `app_id` int(11) NOT NULL COMMENT '应用系统ID', `disabled` bit(1) DEFAULT b'0' COMMENT '是否已被禁用,y-已禁用,n-未禁用,其值决定记录是否可用,是否禁用性标记', `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否已被锁定,,y-已锁定用,n-未锁定,其值决定记录是否可见,逻辑删除标记', `creator` int(11) DEFAULT NULL COMMENT '创建者', `gmt_created` timestamp NULL DEFAULT CURRENT_TIMESTAMP, `modifier` int(11) DEFAULT NULL, `gmt_modified` timestamp NULL DEFAULT CURRENT_TIMESTAMP, `remark` varchar(255) DEFAULT NULL COMMENT '备注', PRIMARY KEY (`id`), UNIQUE KEY `index_user_role` (`user_id`,`role_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户-角色表';
版本日志表
CREATE TABLE `sys_ver_log` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID', `code` varchar(64) NOT NULL COMMENT '版本号', `content` text COMMENT '版本功能更改', `disabled` bit(1) DEFAULT b'0' COMMENT '是否已被禁用,y-已禁用,n-未禁用,其值决定记录是否可用,是否禁用性标记', `deleted` bit(1) DEFAULT b'0' COMMENT '是否已被锁定,,y-已锁定用,n-未锁定,其值决定记录是否可见,逻辑删除标记', `creator` int(11) DEFAULT NULL COMMENT '创建者', `gmt_created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `modifier` int(11) DEFAULT NULL COMMENT '修改者', `gmt_modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间', `remark` varchar(255) DEFAULT NULL COMMENT '备注', PRIMARY KEY (`id`), UNIQUE KEY `code_UNIQUE` (`code`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='版本日志表';
小结
略