在《信息系統開發平台OpenExpressApp - 用戶權限模塊設計》中對RBAC以及在OEA中的涉及進行了簡要介紹,上篇《信息系統開發平台OpenExpressApp - 用戶管理》介紹了基本的用戶管理,本篇繼續講解基於用戶的功能權限管理,下一篇介紹數據權限。
部門管理
部門相當於組織機構,目前只是簡單的實現了最基本的一種模式。部門下面掛接崗位,這是部門+崗位=角色,角色下掛接人和功能權限,後面將增加數據權限。以下為權限相關的類圖:
其中,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);
}
}