我们“低代码开发平台”免费开放以后,有朋友觉得我们的权限做得有点复杂,不可否认我们的权限是有些特殊,但其实并不复杂,最多只能说是有点特殊,因为我们的权限是按权限功能进行区分的,我们根据权限的功能分为:操作权限,数据权限,字段权限,按钮权限,插件权限,报表权限,提醒任务权限。所以这一点上可能和他们所接触到的系统有所不同,从而觉得有点复杂,但是如果你了解之后呢?
权限功能划分上其实是非常直观的,不过在“数据权限”设置方面就大大区别于其他系统了。因为我们权限设置需要与“低代码开发平台”的脚本进行配合,比如最常用的权限:
个人权限 :只能查看本人的业务数据;
部门权限 :能查看本部门所有人的业务数据;
而设置这种类型的权限就需要用到我们“低代码开发平台”的脚本了,不如如下图员工ID = UserID()这样的,其中UserID()脚本就表示当前登录用户的ID,
为什么要用到脚本呢?因为一个表单上往往不止一个用户角色,比如一个案件表单上就可能存在“接案人”、“查勘员”、“定损员”,甚至还有其他的用户角色,那么对于这种一个表单多个用户角色的,如果不是用脚本,什么方法更好呢?
如果用脚本,那么就可以如上图所示的设置:“结案人ID = UserID()” OR “查勘员ID = UserID()” OR “定损员ID = UserID()”。这样的设置才能更简单、更灵活、更高效。
那对于部门权限呢?
由于部门存在层级结构,所以每个部门都可能有子部门存在,所以我们用“GetDeptList()”脚本来获取 当前部门 及其 子部门 的ID列表,用于设置权限。
可以想想上面一个表单多个用户角色的情况,如果没有脚本,要设某个人能看本部门所有人的业务数据你会怎么设置呢?显然是一个非常难受的事情。
有朋友给我演示他们怎么做的,他们是在权限设置的时候加SQL的WHERE条件去做( 不知道这样的做法是不是多,反正我是不理解也不会接受这种做法的 ),使用SQL意味着需要先知道查询SQL,另外各种读写都需要数据权限校验的时候,显然每个SQL的写法都可能不同,那么用SQL的WHERE条件显然不合适的。
好像还有朋友使用规则引擎来进行数据过滤,这种我们并没有研究过,但是按我的理解,如果使用规则引擎,除非是用规则引擎能够动态生成WHERE条件,否则必然需要先把数据读取出来再用规则以前进行过滤,想起里都为服务器“累”得慌。
还看过很多如下图类似的设置,就是打钩打钩的,但是这种对于同一个表单上多个用户角色真的Hold不住的。但是这种勾的方式好像被很多用户所喜欢,这种也许对于硬编码的系统,所有需求完全明确,每个表单上所有用户角色完全明确的情况,也许是可以的吧。
不过虽然解决了“个人权限”、“部门权限”的问题,但是如果有一些其他的需求呢?我们曾经遇到过一个需求:客户要对合作放开放账号也能看自己的数据,并且合作方用户只能看最近一年的数据(毕竟业务特殊不能让他们也查看太多历史数据),只能看最近一年的这种需求够特殊,但是真实发生了!针对这样的需求,如果硬编码都难,但是如果结合着脚本不也是很轻松的事情吗?比如:
用脚本就是:创建时间 >= Today(-365) 就是这么简单。
权限不难,估计是觉得要记几个脚本吧!
评论留言