注意:本文并非提出任何建议或者解决方案,只是记录本人在架构设计过程中的体会。
目的:为将来的系统架构设计提供参考,记录架构设计思路
背景:在系统设计中普遍会使用到很多非常通用的功能,本文的目的是提取这些功能并模块化,以便在将来的设计中加以利用,并不断改进,从而降低开发风险,提高开发效率。
用户以及操作权限管理
应用场景描述:用户在一个系统中针对数据的操作扮演不同的角色。 要求该模块可以满足如下功能要求:
可以描述模块-用户的访问许可关系;
可以描述操作-用户之间的访问许可关系;
可以描述数据-用户之间的访问许可关系;
将上述关系归结成应用场景可能类似于以下这样:
当A用户创建a数据,A用户可以对a数据具备完全控制权限,而其他用户(B,C,D,E)对此不具备任何权限。如果A用户需要D用户与他进行协作,但是该协作需要A用户向D用户共享a数据,则D用户可以阅读a数据中的部分信息(这部分信息与其工作相关)以及对a数据进行部分操作(这些操作与其工作相关)
现在引入审核机制:
A用户创建a数据,B用户审核a数据并指派C用户为该数据负责。C用户需要D、E用户进行协作完成特定工作,其工作需要使用a数据。
解决方法:
关键组成:用户、组、数据角色、操作
我将所有操作进行细分,粒度限制为:进行该操作不需要其他操作的协助
操作与数据角色相关,不同的数据角色具备不同的操作许可
组具备一个缺省数据角色,该组的用户也继承该缺省数据角色的权限许可
人员本身不具备权限,但是人员可以属于一个或多个组
当人员属于多个组时,具备这些组缺省数据角色操作权限的合集,我们把这称之为BaseOperationSet(基础操作集)
每个数据会与不同的用户相关,不同的用户在针对该数据的操作过程中承担的是不同的数据角色(例如录入、审核、修改、维护等等),我们把这称之为DataOperationSet(数据操作集)
针对特定数据,先判断基础操作集中是否具备对该数据的操作许可
如果没有,再判断数据操作集中是否有该用户的特定操作许可
如果在基础操作集与数据操作集中都没有,则表明该数据对该用户是透明的。
数据库设计:
类设计:
以后其他应用可以基于此结构进行扩展,例如在当前项目中就以此基础进行进行了如下扩展:
目的:为将来的系统架构设计提供参考,记录架构设计思路
背景:在系统设计中普遍会使用到很多非常通用的功能,本文的目的是提取这些功能并模块化,以便在将来的设计中加以利用,并不断改进,从而降低开发风险,提高开发效率。
用户以及操作权限管理
应用场景描述:用户在一个系统中针对数据的操作扮演不同的角色。 要求该模块可以满足如下功能要求:
可以描述模块-用户的访问许可关系;
可以描述操作-用户之间的访问许可关系;
可以描述数据-用户之间的访问许可关系;
将上述关系归结成应用场景可能类似于以下这样:
当A用户创建a数据,A用户可以对a数据具备完全控制权限,而其他用户(B,C,D,E)对此不具备任何权限。如果A用户需要D用户与他进行协作,但是该协作需要A用户向D用户共享a数据,则D用户可以阅读a数据中的部分信息(这部分信息与其工作相关)以及对a数据进行部分操作(这些操作与其工作相关)
现在引入审核机制:
A用户创建a数据,B用户审核a数据并指派C用户为该数据负责。C用户需要D、E用户进行协作完成特定工作,其工作需要使用a数据。
解决方法:
关键组成:用户、组、数据角色、操作
我将所有操作进行细分,粒度限制为:进行该操作不需要其他操作的协助
操作与数据角色相关,不同的数据角色具备不同的操作许可
组具备一个缺省数据角色,该组的用户也继承该缺省数据角色的权限许可
人员本身不具备权限,但是人员可以属于一个或多个组
当人员属于多个组时,具备这些组缺省数据角色操作权限的合集,我们把这称之为BaseOperationSet(基础操作集)
每个数据会与不同的用户相关,不同的用户在针对该数据的操作过程中承担的是不同的数据角色(例如录入、审核、修改、维护等等),我们把这称之为DataOperationSet(数据操作集)
针对特定数据,先判断基础操作集中是否具备对该数据的操作许可
如果没有,再判断数据操作集中是否有该用户的特定操作许可
如果在基础操作集与数据操作集中都没有,则表明该数据对该用户是透明的。
数据库设计:
![](/images/cnblogs_com/emmet_chang/123.jpg)
类设计:
![](/images/cnblogs_com/emmet_chang/1231.jpg)
以后其他应用可以基于此结构进行扩展,例如在当前项目中就以此基础进行进行了如下扩展:
![](/images/cnblogs_com/emmet_chang/1232.jpg)