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

ACL是一种访问控制机制,包含三个关键要素:用户(User)、资源(Resource)和操作(Operate),当用户请求操作资源时,检查资源的权限列表,如果资源的权限列表中存在该用户的操作权限则允许,否则拒绝。RBAC模型,三个基础组成部分:用户(User)、角色(Role)和权限(Privilege),通过定义角色的权限,授予用户某个角色从而来控制用户的权限,实现了用户和权限的逻辑分离(区别于ACL模型);...
摘要由CSDN通过智能技术生成

权限系统相关概念

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),基于资源的权限管理

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

// 基于角色:
if (user.hasRole("Project Manager") || user.hasRole("Department Manager") ) {
    //显示报表按钮
} else {
    //不显示按钮
}

// 基于权限:
if (user.isPermitted("projectReport:view:123456")) {
    //显示报表按钮
} else {
    //不显示按钮
} 

 其它权限模型

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

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

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

功能权限表:

/** 功能权限 **/
CREATE TABLE `system_permission` (
	`id` BIGINT(11) NOT NULL AUTO_INCREMENT COMMENT '菜单ID' primary key,
	`name` VARCHAR(32) NOT NULL COMMENT '菜单名称',
	`permission` VARCHAR(32) NULL DEFAULT NULL COMMENT '菜单权限标识',
	`path` VARCHAR(128) NULL DEFAULT NULL COMMENT '前端URL',
	`url` VARCHAR(128) NULL DEFAULT NULL COMMENT '请求链接',
	`method` VARCHAR(32) NULL DEFAULT NULL COMMENT '请求方法',
	`parent_id` INT(11) NULL DEFAULT NULL COMMENT '父菜单ID',
	`icon` VARCHAR(32) NULL DEFAULT NULL COMMENT '图标',
	`component` VARCHAR(64) 
  • 5
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android用户权限设计是指在Android系统中,为应用程序提供安全机制,控制应用程序对设备资源(如照相机、联系人、位置等)的访问权限。以下是一些常见的Android用户权限设计: 1. 权限分类:Android将权限分为普通权限和危险权限两种。普通权限是指不涉及用户隐私或设备安全的权限,应用程序可以在不通过用户确认的情况下获得这些权限。而危险权限则是指可能对用户隐私或设备安全造成影响的权限,应用程序需要在运行时获得用户的授权才能使用。 2. 运行时权限:为了保护用户的隐私和安全,Android引入了运行时权限机制。当应用程序需要使用危险权限时,Android会弹出授权对话框,要求用户授权。用户可以选择允许或拒绝授权,应用程序需要根据用户的选择来执行相应的操作。 3. 权限检查:在应用程序使用权限之前,需要进行权限检查,以确保应用程序已经获得了必要的权限。如果应用程序没有获得权限,就需要向用户申请授权。 4. 权限撤销:用户可以随时撤销应用程序的权限,Android会弹出撤销授权对话框,询问用户是否撤销授权。应用程序需要根据用户的选择来执行相应的操作。 5. 权限管理:Android提供了权限管理界面,用户可以在该界面中查看和管理应用程序的权限用户可以选择禁用或启用某个权限,以保护自己的隐私和安全。 总之,Android用户权限设计是非常重要的,它可以帮助保护用户的隐私和安全,防止恶意应用程序对设备造成损害。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值