`
metadmin
  • 浏览: 167915 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

《玩转细粒度权限管理》 六,细粒度数据操作权限

阅读更多

 

第六章

细粒度数据操作权限

 

 

很多系统对于黑客不堪一击。请看这样的示例:

1, 前台展现客户能查看的客户数据,而且用户能删除的客户数据,就是前台展现出来的数据;

2, 当用户选择某个用户,点击删除按钮,后台执行删除操作。

比如,请求后台删除的 url 是: http://www.test.com/crm/customer.do?id=3

假设, id=13 的客户在前台不显示(因为当前用户没有对该客户数据有删除权限),但用户输入 http://www.test.com/crm/customer.do?id=13 显然 id=13 的客户将被删除掉。

 

有开发者建议采用 id 值不要使用自增长型,而改用其他型,比如 hashcode 等。这也不大合适,可以使用爬虫轻松地将漏洞爬出来。

 

显然,仅仅通过界面层次控制数据级权限是不够的。

解决方案

数据级防火墙

显然,需要为业务系统构建一道数据级防火墙。该防火墙能够判断当前用户对请求的数据,是否有操作权限。如果没有操作权限,告知业务系统,且告知拒绝理由。

防火墙位置

后台业务方法被执行前,需要做个权限检查。检查通过后,才执行该操作,否则不予执行。

 

这种注入模式有 2 种, 1 ,硬编码注入; 2 AOP 方法拦截。

硬编码注入,类似这样:

…
if( SecurityService.permit( user, customer, Privilege.DELETE_CUSTOMER ) ) {
   customerService.delete( customer );
} else {
       …
       // 对该客户没有删除权限,转移到提示界面
}
…
 

 

 

AOP 方法拦截,通过给业务方法 annotation 签名。当该方法被执行时,自动触发权限判断逻辑。

public interface CustomerService {
	/** 
     * @security id=DELETE_CUSTOMER
	 */
	public void delete( Customer customer, User user );
}
 

 

 

权限逻辑

大多业务系统,采用 if else 逻辑判断,判定用户是否具有对某数据的操作权限。

这种细粒度的权限逻辑,无法或者说非常难使用某种模型来自动处理。因此大多系统采取硬编码模式实现权限逻辑。

本章介绍怎样使用 Metadmin 来管理权限逻辑。

如果使用 Metadmin

以下演示来自 metadmin 下载包里面包含的演示示例,可以在 www.metadmin.com 下载 Metadmin 安装程序包。

 

Metadmin 不通过编程,而是通过设计器快速设计出权限逻辑,并可在线测试权限逻辑。

怎样与系统集成

MetadminService 类,提供如下方法:

static Decision

permit (int privilegeId,   User  user, java.lang.Object businessData, java.util.Map context)  
          
评估决策授权策略,返回决策结果。

表示对于 privilegeId 操作, user 对于 businessData 业务数据是否有操作权限。 context 表示权限判定需要的业务数据,可以为 null

 

WebMetadminService 类,提供如下方法:

static boolean

permit (HttpServletRequest req, int privilegeId, java.lang.Object businessObject)  
          
评估决策授权策略,返回决策结果。

static boolean

permit (HttpServletRequest req, int privilegeId, java.lang.Object businessObject, java.util.Map context)  
          
评估决策授权策略,返回决策结果。

WebMetadminService MetadminService Web 程序封装,从 HttpServletRequest 里面取出 user ,而不用显式地传值。

完整 JAVADOC 请浏览: http://www.metadmin.com/doc/javadoc/index.html

 

示例程序,对删除员工进行权限判定代码如下:

if (WebMetadminService.permit(req, Privilege.DELETE_EMPLOYEE,
					employee)) {
	employeeManager.deleteEmployee(id);
}
 

 

 

employee 对象,是根据前台传入 id 参数从数据库查询出来的员工对象。

权限逻辑设置

上章例子设置:总公司用户能查询所有员工;分公司用户能查询本分公司及下属营业部员工;营业部员工能查询本营业部员工。

 

本例将员工删除权限修改一下:所有用户只能删除自己所在机构的员工,也就是总公司用户只能删除总公司员工;分公司用户只能删除分公司员工;营业部用户只能删除营业部员工。

 

Metadmin 对于这样的权限逻辑,只要新建“所有用户”用户分类,及“用户所在机构员工”业务数据分类,然后将该 2 种分类配对设置该“删除员工”权限即可。

 

首先,创建“所有用户”用户分类,打开设计器: http://localhost:8080/mydemo/metadmin/designer

1.      在用户分类栏,新建分类,输入名称为“所有用户”;

2.      创建固定值 a ,设置其值为 1

3.      在表达式定义处,定义 Binary 表达式“ a=a ”。

这样,所有用户都会满足该条件。

 

然后,创建“用户所在机构员工”业务数据分类,打开设计器: http://localhost:8080/mydemo/metadmin/designer

1.    在业务数据分类栏,新建分类,输入名称为“用户所在机构员工”;

2.    创建用户属性变量“ userCompanyId ”,其值等于用户的 companyId 属性;

3.    创建业务数据变量“ businessDataCompanyId” ,其值等于 Employee 对象的 companyId 属性;

4.    在表达式定义处,定义 Binary 表达式 userCompanyId==businessDataCompanyId

这样,只有当 user 对象和 employee 对象的 companyId 属性相等时,数据才属于该业务数据分类。如图示:


 

然后,将该分类配对设置给删除员工权限。如图示:

 

至此,权限逻辑设置完毕。业务代码里面集成的权限判断,将按照该逻辑执行。当权限判断逻辑发生变化,只要打开设计器重新设计权限逻辑即可。不需要修改代码,重新发布系统。

分享到:
评论

相关推荐

    java的细粒度权限和shiro权限校验 ssh

    在Java开发中,细粒度权限管理是一种重要的安全机制,它允许系统对用户访问资源进行精确控制,确保每个用户只能操作他们被授权的部分。Shiro是Apache组织提供的一款强大且易用的Java安全框架,它提供了身份认证、...

    基于RBAC模型的细粒度权限控制

    总之,基于RBAC的细粒度权限控制提供了一种有效且灵活的方式来管理Web应用的访问权限。它通过角色将用户和权限关联,减少了管理开销,增强了系统的安全性和适应性。随着企业需求的不断变化,RBAC模型已成为现代权限...

    Android平台细粒度权限管理系统的研究与实现.pdf

    与粗粒度权限管理相比,细粒度权限管理提供了更加灵活和细致的权限控制方式。这意味着系统可以对应用请求的权限进行更细粒度的管理和分析,从而让用户在授权时可以选择性地赋予应用权限,而不是全有或全无的方式。...

    电信设备-信息系统中细粒度权限管理方法.zip

    这种方法与传统的粗粒度权限管理不同,后者通常只设置如“读取”、“写入”或“执行”等基本权限,而细粒度权限管理则可以对每个具体的操作进行授权,如“创建文件”、“编辑特定字段”或“查看特定记录”。...

    基于SpringBoot+shiro实现数据库的细粒度动态权限管理系统

    基于SpringBoot+shiro实现数据库的细粒度动态权限管理系统 项目经过严格测试,确保可以运行!源码无需做任何更改! 基于SpringBoot+shiro实现数据库的细粒度动态权限管理系统 项目经过严格测试,确保可以运行!...

    Android平台下细粒度权限管理机制设计与实现.pdf

    随着智能设备的普及和Android系统的广泛使用,这种粗粒度的权限管理机制的局限性逐渐显现,因此,细粒度权限管理机制的设计与实现显得尤为重要。 细粒度权限管理机制旨在解决粗粒度机制中的问题,它允许应用程序在...

    细粒度用户评论情感分析数据集(2018-AI-challenger)

    共包含6大类20个细粒度要素的情感倾向.数据集分为训练、验证、测试A与测试B四部分。数据集中的评价对象按照粒度不同划分为两个层次,层次一为粗粒度的评价对象,例如评论文本中涉及的服务、位置等要素;层次二为细...

    AI Challenger 2018 细粒度用户评论情感分析数据集

    本次比赛我们提供了一个高质量的海量数据集,共包含6大类20个细粒度要素的情感倾向。参赛人员需根据标注的细粒度要素的情感倾向建立算法,对用户评论进行情感挖掘,组委将通过计算参赛者提交预测值和场景真实值之间...

    AppBoxPro细粒度通用权限管理框架源码

    7. **细粒度权限控制**:AppBoxPro强调细粒度权限管理,意味着不仅控制到用户和角色级别,还可以深入到具体的功能和数据记录层面,确保了权限分配的灵活性和安全性。 8. **源码分析**:拥有AppBoxPro的源码,开发者...

    目标检测数据集:100类大型细粒度飞机图像检测数据集(yolo标注格式)

    项目包含:100类大型细粒度飞机图像检测数据集(yolo标注格式),数据保存按照文件夹保存,经测试,可直接用作目标检测数据集,无需额外处理。 用于细粒度图像检测任务,FGVC数据 【数据总大小】341 MB 【数据集...

    权限控制之粗粒度与细粒度概念及实现简单介绍

    细粒度权限管理是数据级别的权限管理,例如部门经理可以访问本部门的员工信息,用户只可以看到自己的菜单,大区经理只能查看本辖区的销售订单。 在实现粗粒度权限管理时,可以将权限管理的代码抽取出来在系统架构...

    基于Spring Security的细粒度权限管理系统设计源码

    这是一个基于Spring Security框架的细粒度权限管理系统,使用Java语言开发,同时包含JavaScript、CSS、HTML等多种编程语言。该项目共包含2447个文件,其中主要文件类型包括JavaScript、PNG图片、CSS、HTML、JAR包、...

    细粒度情感方面情感数据集

    《细粒度情感方面情感数据集:深度剖析与应用》 在当今的信息化社会,情感分析已经成为数据分析领域的重要分支,特别是在互联网评论、社交媒体等大数据环境中,用户的情感倾向往往能反映出产品或服务的真实口碑。本...

    细粒度位置追踪

    CP-ABE技术允许用户根据自己的权限访问加密数据,实现细粒度的访问控制。同时,通过转换键和代理重加密技术,大部分计算任务被转移到云服务器,减轻了移动设备的计算负担,减少了资源消耗。这意味着移动设备用户可以...

    Ai—challenger数据集细粒度情感分析

    本次比赛我们提供了一个高质量的海量数据集,共包含6大类20个细粒度要素的情感倾向。参赛人员需根据标注的细粒度要素的情感倾向建立算法,对用户评论进行情感挖掘,组委将通过计算参赛者提交预测值和场景真实值之间...

    【2018hit计算机系统安全】实验二:细粒度权限管理及实现root能力的分发和管理

    ### 细粒度权限管理与Root能力的分发和管理 #### 实验背景与目标 在计算机系统安全领域,权限管理是一项重要的技术措施,用于控制用户对于系统资源的访问级别。其中,细粒度权限管理和root能力的有效管理是确保...

    动态代理加注解实现细粒度的权限管理,具体到方法(前面上传的资源修改)

    本资源通过动态代理和注解技术实现了一种细粒度的权限管理方案,具体到每个方法的级别,这样可以确保用户只能执行他们被授权的操作。 首先,让我们深入了解一下动态代理。在Java中,动态代理主要通过`java.lang....

    动态代理加注解实现细粒度的权限管理,具体到方法

    在IT行业中,权限管理是系统安全的重要组成部分,尤其在企业级应用中,对用户操作进行细粒度控制显得尤为重要。动态代理与注解的结合,为实现这种细粒度的权限管理提供了一种灵活且高效的方法。下面我们将深入探讨这...

Global site tag (gtag.js) - Google Analytics