慢慢来

Emmet.C's Technology Blog

导航

架构设计备注(用户以及操作权限管理)

Posted on 2004-11-26 11:51  Emmet.C  阅读(625)  评论(0编辑  收藏  举报
注意:本文并非提出任何建议或者解决方案,只是记录本人在架构设计过程中的体会。

目的:为将来的系统架构设计提供参考,记录架构设计思路

背景:在系统设计中普遍会使用到很多非常通用的功能,本文的目的是提取这些功能并模块化,以便在将来的设计中加以利用,并不断改进,从而降低开发风险,提高开发效率。

用户以及操作权限管理

应用场景描述:用户在一个系统中针对数据的操作扮演不同的角色。 要求该模块可以满足如下功能要求:

可以描述模块-用户的访问许可关系;
可以描述操作-用户之间的访问许可关系;
可以描述数据-用户之间的访问许可关系;

将上述关系归结成应用场景可能类似于以下这样:

当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(数据操作集)
针对特定数据,先判断基础操作集中是否具备对该数据的操作许可
如果没有,再判断数据操作集中是否有该用户的特定操作许可
如果在基础操作集与数据操作集中都没有,则表明该数据对该用户是透明的。


数据库设计:


类设计:

以后其他应用可以基于此结构进行扩展,例如在当前项目中就以此基础进行进行了如下扩展: