细粒度、可扩展的权限体系

  ZCMS提供了非常丰富的内容管理和动态功能,并且允许二次开发人员扩展更多的功能。为了使这么多的功能能够被不同的部门、岗位和人员合理使用,做到各司其职、互不影响,ZCMS实现了非常灵活的细粒度的、可扩展的权限控制体系。

权限项和权限拥有者

  ZCMS将系统中需要授权才能执行的一个或者一类行为称之为权限项,例如保存栏目、删除文章等。权限项有两种,一种是不区分操作的数据对象的,称之为 简单权限项,例如“系统配置”菜单下的“保存”权限项,只要授予了这个权限项,就可以保存所有的系统配置数据。另一种是区分操作的数据对象的,称之为数据 权限项,例如“栏目管理”菜单下的“删除”权限项,需要逐个栏目授予,只有授权了当前栏目的“删除”权限项,界面中的“删除”按钮才会处于可用状态。通过 简单权限项和数据权限项的结合,ZCMS实现了最细粒度的权限控制,界面的任何按钮或者UI控件,都可以通过权限控制体系加以限制,做到只有拥有相关权限 项的用户才能够使用相应的按钮和UI控件。

  可以被授予权限项的目标实体在ZCMS中称之为权限拥有者,主要有三种,分别是:


1). 机构:代表着一个分支机构或者业务部门,可以根据机构的地域或者职能的不同授予不同的权限项;

2). 角色:代表着一个岗位,是为了便于给工作职责相同的用户统一设置权限而设置的。角色必须属于某一个机构;

3). 用户:代表着用户个体,一个用户可以拥有多个角色,但只能属于一个机构。用户的权限是用户拥有的所有角色的权限的合集,再加上单独为此用户授予的权限的集合。

  ZCMS支持按权限拥有者授权,即选定一个权限拥有者,为该权限拥有者逐个授予权限项;也支持按权限项授权,即选中一个权限项,逐个为该权限项设定拥有它的权限拥有者。

 

图:为角色授权

图:为角色授权


  2 分级授权


  ZCMS中的机构可以有多级子机构,能够实现按机构分级授权。一般情况下,父机构被授予的权限项的集合是其子机构权限的超集,父机构下的子机构的权限 不能超出父机构的权限范围。另一方面,机构下的角色的权限不能超出机构自身的权限范围,机构下的用户一般情况下也不能超出机构自身的权限范围。综上,子机 构下的所有权限拥有者的权限都不能超过其父机构的权限范围。系统管理人员创建子机构、角色、用户授权时,不在父机构的权限范围内的权限不可选。


  在ZCMS中,如果一个用户被授予了机构管理、角色管理或用户管理的菜单权限,则此用户可以管理本机构下的权限拥有者,为本机构下的权限拥有者授权, 但不能管理父级机构以及同级机构的权限拥有者,也不能修改这些机构下的权限拥有者的权限。通过这种方式,ZCMS在实现严谨的分级授权机制的基础上,让各 个机构能够自主添加本机构下的子机构、角色和用户,提供了最大的灵活性。

  除了严格的逐级授权外,父级机构的管理人员还可以通过为子机构下的某个用户赋予父机构下的角色的方式,为子机构下的用户单独提升权限。也可以通过为子机构下的某个用户赋予其他子机构下的角色的方式,实现跨机构授权,以便于更好地适应兼任职务等情况。

 

图:为子机构设置权限范围

图:为子机构设置权限范围


可扩展的权限体系


  ZCMS的权限控制体系被设计成可扩展的,二次开发人员可以通过以下三方面扩展ZCMS的权限体系:


1). 权限项:ZCMS中的权限项被设计成可扩展,可以通过注册扩展项到相应的扩展服务的方式添加新的权限项。如果是简单权限项,则一般注册到菜单权限扩展服务下;如果是数据权限项,则需要注册到站点权限扩展服务、栏目权限扩展服务等相关的数据类型对应的扩展服务中去。


2). 权限授予界面:各个插件注册了权限项之后,还需要通过com.zving.platform.PrivUI 扩展点注册自己的权限授予界面,在机构、角色、用户的权限设置界面中显示一个选项卡。通过此选项卡可以让管理人员以各种形式(表格、树形结构等)的界面为 权限拥有者授予权限项,并通过统一的权限保存API将各插件注册的权限项保存到对应的数据库记录中。


3). 权限检查行为:各个插件实现了自己的权限授予界面之后,还需要注册权限检查行为到com.zving.framework.PrivCheck扩展点,以实现各插件自己注册的权限项的检查逻辑。