在中对RBAC以及在OEA中的涉及进行了简要介绍,上篇《》介绍了基本的用户管理,本篇继续讲解基于用户的功能权限管理,下一篇介绍数据权限。
部门管理
部门相当于组织机构,企业的组织机构其实是很复杂的。其中岗位是分级别的,且上下级汇报关系的,还有代理授权等,公司的管理又分为矩阵式管理,既有部门,也根据产品线分为事业群管理的等。目前OEA只是简单的实现了最最基本的一种模式。部门下面挂接岗位,这是部门+岗位=角色,角色下挂接人和功能权限,后面将增加数据权限。以下为权限相关的类图:
其中,OrgPisitionOperation为角色的功能权限对象,功能对象Operation引用了CommandBase,所以OEA的功能权限中显示可管理的功能是所有的Command,包括toolbar上的以及右键菜单上的命令,具体实现就不说了,大家以后可以去看具体代码。
功能权限
PBS模板界面如下图所示:
在【功能权限】显示如下,左边会列出系统所有模块,右边列出的是每个模块下的所有可控制的对象,在根对象会多出一个【打开模块】内置权限,后一小节会讲一下:
这些功能都是我们编写的Command以及OEA内置的Command,也就是在界面能够看到的按钮、菜单等都可以控制。目前还不提供快捷方式设置,如设置可更改,则自动把添加、添加子等一并修改。
当设置后,再次登录时,不允许操作的功能,AutoUI不会自动生成这些命令。
private static void CreateCommandsForToolBar(ToolBar toolbar, Type boType, ObjectView view, BoInfoOperationList commands) { ...... 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); } } 本文转自 jingen_zhou 51CTO博客,原文链接: http://blog.51cto.com/zhoujg/518659 ,如需转载请自行联系原作者