OFBiz 初步 之 权限设计

本文深入探讨了Apache OFBiz的权限设计,它采用安全组而非传统RBAC角色来管理权限。权限控制涉及登录、组件菜单、请求、屏幕等多个级别。安全组与权限通过多对多关系关联,用户通过安全组间接获取权限。OFBiz的数据表结构包括SECURITY_GROUP等六个表,用于维护权限和用户关系。代码实现中,关键方法如hasPermission、hasEntityPermission等用于检查用户权限。OFBiz在大型ERP平台背景下,通过安全组提供更细粒度、更灵活的权限管理,同时保留了角色的概念。
摘要由CSDN通过智能技术生成

简介

Apache Open For Business(Apache OFBiz) 是 Apache 开源的一个经典ERP项目。它提供了一套企业应用,用于集成以及自动化一些企业的“商业流程”。

从学习角度来看,它也是一个非常不错的企业级应用框架。这篇文章从OFBiz的权限设计这一切入点来谈谈OFBiz对于应用系统的权限设计。

设计思想简述

OFBiz采用的“安全组”(Security Group)来将"权限"跟"用户"联系起来。系统中有若干种权限,比如系统预置的权限、用户自定义的权限、资源的权限、操作的权限等等,这些权限会跟安全组建立关系(多对多的关系),而用户又与安全组建立关系(也是多对多的关系)。

其中,系统预置权限,是以XML配置的方式导入数据表的。这些配置文件通常的路径为{Component/Application baseDir}/data/XXXSecurityData.xml。这里有对整个权限设计相关表的初始化数据。

权限控制级别

OFBiz对于权限有如下几个控制级别:

登录级别

在每个Component的根目录下的ofbiz-component.xml文件下,有对于访问该component的“最基本的权限”定义。所谓最基本的权限,就是登录该component的用户需要至少拥有该文件内定义的权限才可以访问。示例:

见其中的“base-permission”属性。可以看到它包含了两个权限值——OFBTOOLS/FACILITY,这也意味着你必须同时拥有这两个权限才能访问该组件。而通常一个Component也会同时包含权限“OFBTOOLS”以及权限“COMPONNENT-NAME_VIEW”,这样配置的目的是OFBTOOLS用于对web app的访问进行控制,而COMPONNENT-NAME_VIEW用于控制浏览web app的信息。

component 菜单级别

component的顶级菜单显示的组件将只对登录过的用户(并且这些用户至少具有“WEBAPP-NAME_VIEW”或者“COMPONENT_NAME-ADMIN”权限)显示,这跟登录级别的限制相似。这种级别的访问控制实现在“appbar.ftl”中用以控制显示哪些应用程序的tab bar。

request(controller.xml)级别

这里有两个重要的参数,在每个component的webapp下的controller.xml中的每个request(<request-map)标签有一个security(<security)标签,包含了两个属性:

  • https:定义是否对该请求应用SSL加密
  • auth:定义是否需要登录才能执行该请求,因此只有在登录成功以及在其他级别上的安全检查通过后,该请求才会被执行
[javascript] view plain copy
  1. <!-- Request Mappings -->    
  2.     <request-map uri="MarketingReport">    
  3.         <security https="true" auth="true"/>    
  4.         <response name="success" type="view" value="MarketingReport"/>    
  5.     </request-map>    


screen级别

在每个component下的widget文件夹下的screen配置文件中,<section节点下的<condition子节点,存在一个名为<if-has-permission的节点,它有两个属性:
  • permission:标识位于哪个component
  • action:标识执行的动作
permission_action正好构成一个权限,示例:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值