在《信息系统开发平台OpenExpressApp - 用户权限模块设计》中对RBAC以及在OEA中的涉及进行了简要介绍,上篇《信息系统开发平台OpenExpressApp - 用户管理》介绍了基本的用户管理,本篇继续讲解基于用户的功能权限管理,下一篇介绍数据权限。
部门管理
部门相当于组织机构,企业的组织机构其实是很复杂的。其中岗位是分级别的,且上下级汇报关系的,还有代理授权等,公司的管理又分为矩阵式管理,既有部门,也根据产品线分为事业群管理的等。目前OEA只是简单的实现了最最基本的一种模式。部门下面挂接岗位,这是部门+岗位=角色,角色下挂接人和功能权限,后面将增加数据权限。以下为权限相关的类图:
其中,OrgPisitionOperation为角色的功能权限对象,功能对象Operation引用了CommandBase,所以OEA的功能权限中显示可管理的功能是所有的Command,包括toolbar上的以及右键菜单上的命令,具体实现就不说了,大家以后可以去看具体代码。
功能权限
PBS模板界面如下图所示:
在【功能权限】显示如下,左边会列出系统所有模块,右边列出的是每个模块下的所有可控制的对象,在根对象会多出一个【打开模块】内置权限,后一小节会讲一下:
这些功能都是我们编写的Command以及OEA内置的Command,也就是在界面能够看到的按钮、菜单等都可以控制。目前还不提供快捷方式设置,如设置可更改,则自动把添加、添加子等一并修改。
当设置后,再次登录时,不允许操作的功能,AutoUI不会自动生成这些命令。
{
......
for (int i = 0, c = commands.Count; i < c; i++)
{
var command = commands[i].Operation.Command;
//考虑权限
if (!(Csla.ApplicationContext.User.Identity as OEAIdentity).HavePermissionOnOperation
(boInfo.Id, new Guid(command.Id)))
continue;
打开模块权限
登录系统时,系统需要根据当前用户来生成模块列表。第一张图为所有功能列表,在第二张图表示的【部门管理】的【功能权限】中对业务对象去除了【打开模块】功能时,再次登录后看到图三模块列表。
IList<BusinessObjectInfo> modules = new List<BusinessObjectInfo>();
if (Csla.ApplicationContext.User.Identity.IsAuthenticated)
{
foreach (var item in ApplicationModel.Modules)
{
if ((Csla.ApplicationContext.User.Identity as OEAIdentity).HavePermissionOnOperation
(item.Id, new Guid(CommandNames.OpenModule)))
modules.Add(item);
}
}