博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
权限模型
阅读量:6213 次
发布时间:2019-06-21

本文共 13783 字,大约阅读时间需要 45 分钟。

hot3.png

概述

  这里实现一个针对传统企业信息化系统的权限系统,要求如下:

  1. 实现用户信息管理。
  2. 实现企业信息管理。
  3. 实现部门信息管理。
  4. 实现岗位信息管理。
  5. 实现角色信息管理。
  6. 实现权限信息管理。
  7. 实现访客日志信息管理。
  8. 可以将用户归属到某一企业。
  9. 可以将用户归属到某一部门。
  10. 可以为用户按岗位分配权限。
  11. 可以为一类用户分配一组权限。
  12. 可以为同一用户按不同应用系统分配不同的权限。
  13. 可以为同一类用户按不同应用系统分配不同的权限。
  14. 可以为同一岗位按不同应用系统分配不同的权限。
  15. 可以实现数据的逻辑删除。
  16. 可以实现数据在特定业务场景下临时禁用不被修改。

设计

概述

按数据创建时间查询

  考虑到部分业务场景下需要按数据创建时间查询,这里为所有数据定义了创建时间字段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='版本日志表';

小结

  略

转载于:https://my.oschina.net/qwfys200/blog/1826765

你可能感兴趣的文章
tomcat添加context方式部署web应用
查看>>
docker监控
查看>>
uboot学习之一-----源码配置
查看>>
2012_7_5
查看>>
codeforces911G
查看>>
java 集合、接口
查看>>
ACM-ICPC(9/26)
查看>>
LeetCode – Refresh – Binary Tree Post Order Traversal
查看>>
HealthKit使用说明
查看>>
记录一下bing的图片 - 升级版冰糖葫芦
查看>>
扩展欧几里得算法
查看>>
菲波拉契数列
查看>>
HDU5620 KK's Steel(C++语言版)
查看>>
Project Euler Problem 67 Maximum path sum II
查看>>
线性参照,M值的相关测试
查看>>
第二次软工作业--四则运算
查看>>
DAO编程(VC6.0中的应用)
查看>>
浅析 Java Thread.join()
查看>>
PHP通过CURL模拟登录并获取数据
查看>>
Redis 缓存 + Spring 的集成示例(转载)
查看>>