当前位置:   article > 正文

Java,设计,功能权限和数据权限,用户、角色、权限和用户组_java数据权限

java数据权限

权限系统相关概念

ACL(Access Control List),访问控制列表

ACL是一种访问控制机制,包含三个关键要素:用户(User)、资源(Resource)和操作(Operate),当用户请求操作资源时,检查资源的权限列表,如果资源的权限列表中存在该用户的操作权限则允许,否则拒绝。

BAC(Role-Based Access Control),基于角色的访问控制

RBAC模型,三个基础组成部分:用户(User)、角色(Role)和权限(Privilege),通过定义角色的权限,授予用户某个角色从而来控制用户的权限,实现了用户和权限的逻辑分离(区别于ACL模型);

RBAC权限授权,实际上是:Who、What、How,构成了访问权限三元组,也就是:Who对What(Which)进行How的操作。

Who:权限的拥用者或主体,如:Principal、User、Group、 Role、Actor等等;

What:权限针对的对象或资源(Resource、Class);

How:具体的权限(Privilege,正向授权与负向授权);

Operator:操作,表明对What的How操作,也就是:权限(Privilege)+ 资源(Resource);

Role:角色,一定数量的权限的集合,权限分配的单位与载体,目的是隔离用户(User)和权限(Privilege)的逻辑关系;

Group:用户组,权限分配的单位与载体,权限不考虑分配给特定的用户而给组,组可以包括组(以实现权限的继承),也可以包含用户,组内用户继承组的权限,User与Group是多对多的关系,Group可以层次化,以满足不同层级权限控制的要求。

RBAC是一种分析模型,主要分为:基本模型RBAC0(Core RBAC)、角色分层模型RBAC1(Hierarchal RBAC)、角色限制模型RBAC2(Constraint RBAC)和统一模型RBAC3(Combines RBAC);

RBAC0,是RBAC0的核心,定义了能构成RBAC控制系统的最小的元素集合,由四部分构成:用户(User)、角色(Role)、会话(Session)、许可(Pemission),RBAC1、RBAC2、RBAC3都是先后在RBAC0的基础上扩展的。

RBAC1,是RBAC角色的分层模型,在角色中引入了继承的概念,有了继承角色就有了上下级或者等级关系。

RBAC2,是RBAC的约束模型,在RBAC0基础上加入约束的概念,主要引入了:静态职责分离SSD(Static Separation of Duty)和动态职责分离DSD(Dynamic Separation of Duty)。

SSD(Static Separation of Duty)是用户和角色的指派阶段加入的,主要是对用户和角色有如下约束:

1、互斥角色:同一个用户在两个互斥角色中只能选择一个;

2、基数约束:一个用户拥有的角色是有限的,一个角色拥有的许可也是有限的;

3、先决条件约束:用户想要获得高级角色,首先必须拥有低级角色;

DSD(Dynamic Separation of Duty)是会话和角色之间的约束,可以动态的约束用户拥有的角色,如:一个用户可以拥有两个角色,但是运行时只能激活一个角色。

RBAC3,是RBAC1与RBAC2合集,既有角色分层又有约束的一种模型。

RBAC(Resource-Based Access Control),基于资源的权限管理

基于资源的权限管理,以资源为中心进行的访问控制,由于基于角色的权限访问控制,角色所对应的权限发生变化,判断逻辑就必须发生改变,可扩展性差,如果是基于资源的权限访问控制,只需要为资源分配相应的权限,直接判断用户是否拥有该权限即可,可扩展性强。

  1. // 基于角色:
  2. if (user.hasRole("Project Manager") || user.hasRole("Department Manager") ) {
  3. //显示报表按钮
  4. } else {
  5. //不显示按钮
  6. }
  7. // 基于权限:
  8. if (user.isPermitted("projectReport:view:123456")) {
  9. //显示报表按钮
  10. } else {
  11. //不显示按钮
  12. }

 其它权限模型

系统权限(System Authority)=功能权限+数据权限

系统权限设计,数据库表设计(仅供参考):

以下设计,包含了几种模型,实际应用中取其一即可~

功能权限表:

  1. /** 功能权限 **/
  2. CREATE TABLE `system_permission` (
  3. `id` BIGINT(11) NOT NULL AUTO_INCREMENT COMMENT '菜单ID' primary key,
  4. `name` VARCHAR(32) NOT NULL COMMENT '菜单名称',
  5. `permission` VARCHAR(32) NULL DEFAULT NULL COMMENT '菜单权限标识',
  6. `path` VARCHAR(128) NULL DEFAULT NULL COMMENT '前端URL',
  7. `url` VARCHAR(128) NULL DEFAULT NULL COMMENT '请求链接',
  8. `method` VARCHAR(32) NULL DEFAULT NULL COMMENT '请求方法',
  9. `parent_id` INT(11) NULL DEFAULT NULL COMMENT '父菜单ID',
  10. `icon` VARCHAR(32) NULL DEFAULT NULL COMMENT '图标',
  11. `component` VARCHAR(64) NULL DEFAULT NULL C
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/神奇cpp/article/detail/774081
推荐阅读
相关标签
  

闽ICP备14008679号