在金蝶云星空中,权限是按角色配置的,一个用户可以归属于多个角色,如果这些不同角色对于同一个业务的权限有冲突时,我们通常的理解是禁止权限高于一切,但实际上并不是。
举个例子:某用户既属于“采购员”角色,又属于“销售主管”角色,两个角色的权限设置如下:
角色 | 业务对象 | 查看权限 | 数据范围 |
采购员 | 客户 | 禁止 | 未设置数据范围 |
销售主管 | 客户 | 允许 | 仅一小部分客户 |
按照通常的理解,这个用户不仅无法打开客户列表,而且在单据中浏览选择客户时,只能按照“销售主管”角色给予的权限,选择到一小部分客户。但实际测试发现,该用户在录入其他应收单时、在增加供应商选择对应客户时,点击浏览按钮后,能查看到全部客户,而不仅仅是一小部分客户。
经过与总部的沟通,金蝶云星空在设计权限的时候,查看权限和数据范围权限这两个是独立的:
- 如果多个角色都有查看权限,则禁止权限高于一切,这个也是我们通常理解的,因此该用户确实无法打开客户列表这个功能。
- 如果多个角色都有数据权限,则权限是并集,也就是这个客户在采购员角色中,因为未设置数据范围所以可以看到所有客户。
解决办法:当对某角色设置禁止权限的时候,还要同时设置一条无法成立的数据规则,才能保证数据规则正常生效,也就是:
角色 | 业务对象 | 查看权限 | 数据范围 |
采购员 | 客户 | 禁止 | 设置一条无法成立的规则 |
销售主管 | 客户 | 允许 | 仅一小部分客户 |
如下图所示,由于客户编码不可能包含“无法查看”这四个字,所以这条数据规则是无法成立的: