业务程序的权限控制是一个复杂的问题,从应用层面来说至少要解决三个方面的问题。
1. 我是谁,确定用户的标识,解决用户的ID的标记、访问和存储问题。
2。我可以做什么,即用户的功能权限问题。
3.我可以对什么做什么,也就是数据权限问题。例如项目经理可以查看那些项目,可不可以删除,项目经理的上级可不可以对当前项目操作,部门助理可不可以看本部门的项目等等问题。
第一个和第二个问题相对比较好解决,第三个问题比较麻烦。
数据权限的问题实质是数据可以按照数据的ID、属性、业务过程进行授权。我们这里举一个例子。
文档授权:
1.文档创建人可以设置是否可以删除、查看等等权限
2.文档创建人所属部门领导可否删除、查看等等权限
3.如果文档和项目相关,项目经理和成员可否删除、查看等等权限
4.文档发布在A类型下,A类型文档的管理员可否删除、查看等等权限
我们发现文档的权限实际和企业的业务过程和文档本身的属性相关,现在有两个解决方案。
方案A:
1.定义权限业务规则(即定义文档创建人可以设置是否可以删除)。
2.访问数据的时候实时换算出当前数据的访问控制作用于数据。
方案B:
1.定义权限业务规则(即定义文档创建人可以设置是否可以删除)。
2.当数据产生的时候,根据数据属性和权限业务规则对数据进行授权,授权直接作用在数据资源本身,授权后和业务再无关系。
3.访问数据的时候直接对控制点验证。
法官判案:
1.定义刑法 (相当于确定权限的业务规则)。
2.当犯罪案件发生时候,法官根据法律条文和犯罪事实(抢劫、伤人、贩毒等等)不同量刑。(相当于根据规则发放资源权限密钥)。
3.罪犯服刑,此时只关心服刑多少年,不再关注犯罪事实。
方案A,和权限相关的数据列表统计非常困难 ,负责的业务控制需要换算,程序不稳定。
方案B,讲权限规则分离出去,数据的权限控制依赖一致的数据控制密钥。