OA/CRM/ERP 权限管理系统设计 - bg.work办公开源实现

1,070 阅读4分钟

一 、简介

权限管理对有组织结构的系统重要性无需多言,没有权限限制的管理、办公系统将没有可用性可谈。说实话权限管理系统实现起来没有任何门槛,直接几个if else判断就能解决现实需求 ,但是,如果需要灵活、健壮、可维护、可扩展达,使整个开发组满意的的权限管理系统,那就另当别论了。

那么我们来看下权限实现的基本方式:代码中固定权限代码(A),对这段代码名一个代号,然后在系统中建一个(权限/角色),最后把代码(A)对应的代号关联到(权限/角色),这样把系统使用者关联(权限/角色)就实现了系统权限的管理。也许你碰到过更为复杂的权限管理系统,但基本上都是这样实现方式的变体或添加了不同权限限制维度。

在这个文章中,我们将介绍主流权限系统Apache Shiro及Spring Security的实现方式,并在第四节详细介绍bg.work系统权限实现细节和他的独到之处。

二、Apache Shiro

Apache Shiro 不仅包含了权限管理(授权部分),也包含授权/加密/回话管理/验证数据基础接入等功能模块,在这里我们主要介绍权限管理功能模块

首先我们看下他的整体结构图:

流程简介:

业务代码(最上层的各种语言实现)通过登录页面登录系统 登录成功,Apache shiro根据配置分配给操作一个 subject实例,这个subject实例通过realms加载授权数据(连接授权/内部操作标识) 操作者访问不同URL,受到subject加载的 授权链接匹配限制 操作者删除或添加数据,则受到subject加载的内部操作标识限制 通过这些操作限制组合就能有效管理操作者的行为 具体实现代码就不在这里COPY了

三、Spring Security

Spring Security 是Spring 官方支持的权限管理功能,基本功能和Apache Shiro并无多少不同,实现的功能:认证,授权,甚至系统防护,首先我进也来一张实现构图

流程简介:

操作登录系统,初始化Authentication对象,通过UserDetailsService加载对应角色的权限与用户数据填充Authentication的Principal 和grantedAuthorities 当访问一个需要权限的链接时,把链接需要的权限属性和操作者的Authentication交给AccessDecisionManager决定是否有权访问 当CREATE或者DELETE一个数据对象时,把本次操作需要的权限属性和操作者的Authentication交给AccessDecisiionManager判断权限 整个过程和Apache Shiro功能相差无几 四、bg.work 权限管理实现

在简要了解了Apache Shiro 和 Spring Secrity功能后,我们将详细说明bg.work办公框架的实现细节。bg.work的权限系统与本系统的数据与界面实现方式有着紧密的联系,所以在介绍权限系统前,我们要先介绍下数据与界面功能。

1、数据操作:

bg.work在数据层设计了Model ORM,基本结构如下:

//model对应数据库的表,基于model orm 实现,model字段可以动态读取,利用这一原则与权限系统结合,可以动态设置针对model数据控制 @Model("department", "部门") class Department:ContextModel("corp_department", "public") { companion object : RefSingleton { override lateinit var ref: Department } val id= ModelField(null, "id", FieldType.BIGINT, "标示", primaryKey = FieldPrimaryKey()) val name= ModelField(null, "name", FieldType.STRING, "名称") val comment = ModelField(null, "comment", FieldType.TEXT, "注释") }

2、界面定义

对应界面:

3、bg.work权限系统框架结构

说明:

Access Model Rule 控制Model(数据表)

read:是否有权操作、读取字段设置、读取哪个用户数据、限制到什么部门、限制到个人/整个组织、限制到目标角色、附加条件等

delete:是否有权操作、删除哪个用户数据、限制到什么部门、限制到个人/整个组织、限制到目标角色、附加条件等

edit:是否有权操作、更新字段设置、更新哪个用户数据、限制到什么部门、限制到个人/整个组织、限制到目标角色、附加条件等

create:是否有权操作、添加字段设置

设置界面:

Model UI Rule 对Model View 的限制

针对 model view 要展示的字段及操作按钮限制,每种 model都有对应的View Type

设置界面如下:

App menu控制,也是针对管理系统的菜单进行控制:

五、总结

bg.work权限系统的加入,对后续功能的加入实现了直接控制,同时也实现了加入功能时不再考虑权限问题,所有的权限设置都推迟到系统部署或定制阶段

附加:

bg.work 源码连接:鼓励请点赞

github:github.com/ouliuying/b…

gitee:gitee.com/ouliuying/b…