ofbiz 中对权限做了完备的处理,其实权限也只是数据表一个字段,这个字段与安全组关联起来,然后将安全组与用户关联起来,就是两个多对多的关系,这样就实现了权限的分配。
涉及到的表
SECURITY_GROUP 这个表是安全组的表,用来存放安全组,其主要就是一个groupId字段
SECURITY_PERMISSION 这个是存放具体权限的表
SECURITY_GROUP_PERMISSION
将权限与安全组的关系表,因为权限和安全组是多对多的关系,所以需要一张关系表关联,这样通过查找这张表就知道某个安全组有哪些权限
UserLogin是用户登录表
USER_LOGIN_SECURITY_GROUP 这个表是用户和安全组的关联表
以上这些表就是权限设计中涉及到的主要表,其关系是:
user_login 与 security_group 是通过中间表user_login_security_group 体现多对多关系
security_group 与 security_permission 是通过中间表security_group_permission
体现多对多关系用户与安全组通过 UserLoginSecurityGroup 这个表关联,权限与安全组通过SecurityGroupPermission 这个表关联,从而实现用户与具体的权限关联
代码层次的实现
从这个代码可以看出:
首先调用findUserLoginSecurityByUserLoginId() 根据用户id找到其所属全组,然后再调用securityGroupPermissionExists()判断这些组里有没有对应用户对应的权限,根据返回条件,再进行处理。
权限控制级别
登陆级别
在每个组件的ofbiz-component.xml文件下,有对于访问该component的“最基本的权限”定义。即登录该component的用户需要至少拥有该文件内定义的权限才可以访问。
请求级别
应用的controller.xml中的每个
<request-map>
标签有一个<security>
标签包含了两个属性:
https:定义是否对该请求应用SSL加密
auth:定义是否需要登录才能执行该请求,因此只有在登录成功以及在其他级
别上的安全检查通过后,该请求才会被执行
screen级别
在每个组件的widget文件夹下的screen配置文件中,<section>
节点下的<condition>
子节点,存在一个<if-has-permission>
的节点,它有两个属性:
permission:基本权限
action:执行的动作
permission_action正好构成一个权限
freemarker文件级别
service级别
好了,权限部分暂且就说这些。。。