权限设计(资源权限和数据权限)

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

权限设计(资源权限和数据权限)

贴下自己的码云地址

https://gitee.com/imbobo_bo/angel-bo 我所描述的都可以在码云上找到

对权限的理解

通过界面配置,可以配置用户,角色,角色实例可以访问到的资源权限(页面,操作按钮)和页面可以展示的数据

数据库权限表设计

DROP TABLE IF EXISTS `base_permission`;
CREATE TABLE `base_permission` (
  `permission_id` int(11) NOT NULL AUTO_INCREMENT,
  `permission_entity` int(3) DEFAULT NULL COMMENT '权限的实体,可以是用户,角色,角色实例,机构等等,可以扩展',
  `permission_entity_key` int(11) DEFAULT NULL COMMENT '与实体对应的主键ID',
  `permission_access_entity` int(3) DEFAULT NULL COMMENT '被授权的类型,菜单,按钮,其他操作可以扩展,字典值',
  `permission_access_entity_key` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '被授权的类型的主键值,SQL,其他扩展',
  `permission_enabled` int(1) DEFAULT NULL COMMENT '状态,可以操作,不可以操作',
  `create_user_id` int(11) DEFAULT NULL,
  `create_date` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
  `modify_user_id` int(11) DEFAULT NULL,
  `modify_date` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`permission_id`)
) ENGINE=InnoDB AUTO_INCREMENT=451 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

permission_entity:权限实体字典类,需要被授权的实体描述,1代表角色,2代表用户,3代表角色实例等等。。。。

permission_entity_key:权限实体对应的主键

permission_access_entity:被授权的类型字典,例如1,代表菜单,2代表按钮,3代表。。。

permission_access_entity_key:对应被授权类型的描述,比如被授权的是菜单,这里就是菜单ID,比如被授权的是按钮,这里就是按钮的ID,当然是要随着被授权类型变化而变化,必要时可以是SQL

场景:如果对一个角色授权一个访问页面的权限,则这个表里应该存的事
角色字典值2(角色),角色主键3(管理员),授权类型是2(菜单),授权类型主键1(用户管理主键)

数据权限设计

在数据库表中都加入字段值 创建人ID 或者 创建机构 等等可以区分数据归属的字段,本例中用到的是创建人ID,创建人ID可以找到对应机构,也就可以描述数据所属了 数据权限可以大致描述为: 1,系统全部数据

2,指定机构数据

3,指定机构及其下属机构数据

4,所属机构数据

5,所属机构及其下属机构数据

6,自己负责的数据

场景:对一个角色实例授权数据权限,这里所说的角色实例是比如有两个用户张三和李四,具有相同的角色管理员,那对应的角色实例分别为 管理员张三,管理员李四,这里想要对管理员李四进行一个特殊授权,可以查看指定机构的数据
角色字典值3(角色实例),角色实例主键3(管理员李四),授权类型是2(指定机构数据),授权类型描述机构IDs(10,12分别为指定机构主键)

使用mybatis拦截器,过滤数据

上篇博客已经描述了拦截器拦截数据权限,具体可以参考

转载于:https://my.oschina.net/angelbo/blog/2874905

你可能感兴趣的:(权限设计(资源权限和数据权限))