权限模型(Authority Model)(1)
权限模型(Authority Model)
在一个企业级的软件中,权限为企业的信息安全的保证,限制不同的用户对信息的访问。根据经验,归纳出权限模型包含两个部分:
l 第一个部分是相对来说比较死的权限,针对管理员进行管理工作进行的权限,其中分为几个因素,组织机构,用户,角色,操作权限。称该权限为管理员权限。
l 第二个部分是某个组织机构或者用户对某种数据的操作权限,这就比较复杂和灵活。其中包含的因素有,组织机构,用户和某种操作数据,比如说某个文档,它允许某个用户进行写权限。称该权限为用户权限。
按照构造软件的方式,对权限模型的讨论分为3部分,一部分为数据库,一部分为业务层,一部分为表现层。
1. 数据库
l 管理员权限
首先讨论管理员权限。按照实体划分,有4个实体,组织机构(Org),用户(User),角色(Role)和操作权限(Operation)。

如图所示,为权限的实体图。组织可以包含0个或者多个组织,包含0个或者多个用户;用户也可以有上下级关系,因此一个用户也可以管理0个或者多个用户,用户对应至少一个权限(普通用户权限);权限可以有子权限,某一个权限可以由多个用户拥有,权限包含多个操作。
分别对这4个实体建表,对于多对多的关系,还需要建立一张表来存放对应关系。
Org表:组织ID(OrgID,主键),父组织ID(ParentID),……
User表:用户ID(UserID,主键),上级ID(UpperID),属于组织机构ID(OrgID)……
Role表:角色ID(RoleID,主键),上级ID(UpperID),……
UserAuthority表:权限ID(AuthorityID,主键),UserID,RoleID
RoleOperation表:主键ID,RoleID,OperationID
Operation表:操作ID(OperationID,主键),操作名称(OperationName),描述(Description)
但是实际的操作中,一般不会出现Operation表,如果有Operation表,则需要把业务层的所有函数都记录进入这张表,然后再给每个角色分配操作,造成了开发的繁琐。一般的做法是在前台通过隐藏界面的某些功能来进行权限控制。
在这种权限中,有个超级管理员来对系统的管理员权限进行配置。该超级管理员的信息可以在初始化系统的时候存入系统数据库,或者在.Net中,可以存放在web.config文件中。
Org组织机构的数据结构是树型,也就是说对于除根节点外的节点都有父节点,每个节点下面都有用户。
超级管理员应该具有的最小管理功能是用户管理功能,可以进行用户添加,用户注册审核和设置系统管理员的功能。超级管理员设置系统的管理员,需要考虑两个地方,一个是设置什么管理员,一个是设置管理员的权限范围,也就是管理员所能管辖的组织节点。一句话描述就是“在××组织机构的××管理员”,该管理员一般为该组织机构下的用户。由于组织机构的树型结构,因此某个组织机构下面可以有其他的子机构,那么某个组织机构的某个管理员是否有对其下组织机构的管理功能?可以在超级管理员设置管理员的时候指定,那么UserAuthority表就需要添加一个字段IsInherit(用来表示是否有对某组织下其他组织的管理权限)。比如,设置XX组织的一个办公资源管理员,对其下的组织也有管理权限,那么该管理员在查看其下所有办公物资的时候,就会递归的把所有的办公资源列出来。
l 用户权限
接着讨论用户权限。对于这类权限,超级管理员不进行设置,而由管理员来进行设置某种数据,可以由哪些用户进行一定的操作。比如××组织的办公文档管理员,他可以设置该组织下哪些用户可以查看,上传文档,删除文档和修改文档的操作。
一个系统中有多个子系统,对于每个子系统可以有多个功能块,然后每个功能块可以由多个用户来管理。每个子系统中有1或者多种数据让管理员进行管理,然后管理员可以把这些数据以不同的方式为普通用户敞开。如图所示。

用于一个实际的系统中,数据很多,访问数据的方式也有不同。因此,对于每种需要提供普通用户访问权限的数据都需要建一张表来存储用户和访问数据的对应方式。对于办公文档数据,可能添加的表的结构为:[UserAccessID(主)],[UserID],[文档ID],[访问方式];对于公文流转数据,可能添加的表结构为:[UserAccessID(主)],[UserID],[公文流程ID],默认的访问方式就是用户能够使用该流程进行公文流转。
对于某些数据来说,普通用户的权限就可以进行浏览操作。比如,办公桌面的办公新闻,所用用户都可以进行查看。
综合两种权限,本质都一样,就是用户对数据的访问。管理员权限是超级管理员设置用户这种特殊的数据,用户权限是管理员设置系统包含的数据并与用户相关联。
步人员才可以对该流转的公文进行处理。这个就是普通用户设置某种数据可以被某个用户访问的例子,在这里就不考
虑了。
(待续)
浙公网安备 33010602011771号