該篇介紹工作流配置工具的組織機構和權限管理,這兩部分是流程系統必不可缺少的,流程引擎在很多情況下都要依靠組織機構和權限中的角色。例如,任務提交給財務部處理,任務提交給總經理審批,任務提交給管理員審核等。再有稍微復雜一點的,任務提交給流程啟動者的所在部門的主管領導。這些都需要組織機構的支持,在企業中還可能存在一人多崗的情況,還可能存在同崗不同級的情況,總之組織機構是比較復雜的,必須能夠如實的反應公司或者企業的現狀。我們在做BPM的時候必須充分的考慮到各種情況,然后進行抽象和歸納,盡量做到通用,最起碼能滿足99%的用戶需求。
組織機構解決方案
組織機構是體現公司或單位上下級關系的,包括部門、崗位和員工,部門又可以細分為分公司或者地區等,每個部門下設崗位,一個部門可以有多個崗位,部門下包含員工,崗位下包含員工,一個人可以屬於多個部門和多個崗位,一個崗位只能屬於一個部門。它們之間的關系如下圖:
組織機構管理界面如下圖:
部門管理的界面如下圖:
崗位管理的界面如下圖:
崗位級別是指該崗位在整個公司崗位划分中的級別,崗位屬性是指該崗位在當前部門中是否是管理崗,一般分主管領導、副主管領導和普通崗位,管理崗位在流程流轉中比較有用,依此來確定部門的領導。
崗位級別的管理界面如下圖:
崗位級別是公司整體崗位划分,它不依賴於任何部門,體現公司的級別,在部門崗位設定的時候崗位名稱可以重復,級別可以不相同,即同崗不同級,比如都是副經理,一個可能是副總級別,一個可能是主管級別。
注意:由於崗位屬於部門,在設定崗位人員的時候 同時要把該人員添加到部門下面,否則組織機構根據部門查找的時候找不到該人。
我們把組織機構做成標准的模塊HF.Architecture.UI,可以掛接到C/S的應用平台下面。如下圖:
我們知道權限是應用系統不可缺少的部分,每個系統都有自己的權限管理,有的系統權限設計的比較細,有的設計的比較“粗糙”。每個系統對權限的要求也不同,目前市場上的軟件權限設計的五花八門,但沒有一個統一的標准,也沒發現幾個拿來就可以用的。既然應用軟件都需要權限,我們把權限系統做成一個公用的模塊,任何系統調用它,我們先來定義一下權限系統的范疇,權限系統可以分為操作權限和內容權限,為什么這么分呢?我認為操作權限是對用戶用鍵盤或者鼠標操作界面上的按鈕、菜單等所做的限制,它可以使用同一的規則來進行設計,不管是什么業務,都可以使用一個判斷規則;而內容權限是業務產生的數據的權限,包括查看,編輯、創建,這個范圍比較大,需求不一,說白了,它是對數據處理的一種權限,是與業務密切相關的,有的業務需要控制到行和列是否顯示,有點業務則不需要這么細,所以很難用一個統一的規則來約束,我覺得內容的權限應該屬於業務開發領域的范疇,我們這里討論的權限是操作權限,內容權限太復雜這里暫時不討論。
權限解決方案
權限管理以人、組和操作為管理要素,人即系統登錄用戶,所有的人分組管理,對組划分配操作權限。操作細化到每一個界面元素(一個具體操作,如按鈕、菜單),每個操作對應一個唯一的權限碼(細化到界面元素的好處是可以應對任何權限需求,沒有比這個要求更苛刻的了)。在用戶點按鈕或者菜單的時候進行權限判斷。建立組的概念是為了方便管理,一個人可隸屬於多個組,對組賦予某一操作權限后,該組下的所有人都會有該權限,一組為單位分配權限,是不是很方便?人、組和操作之間的關系如下圖:
設計步驟:
根據上面的權限方案,在對系統進行權限設計的時候,遵循以下步驟:
第一步:為系統划分模塊、功能和操作,這個過程一般在系統設計階段已經完成,但是權限設計與具體業務無關,即使在系統設計的時候划分好了功能模塊,也可以在權限系統中重新划分。划分模塊、功能和操作的目的是為了對操作碼分類管理。具體管理的方式是模塊碼-〉功能碼-〉操作碼,三種編碼采用如下編碼方式:
第二步:對操作用戶分組管理,組也可以理解為角色,一個組代表具有一類操作權限的集合,系統中可以有很多組,對租的划分遵循同等權限級別的為一組,盡量避免重疊划分,划分的規則一般與使用系統的客戶所屬部門有關,例如,可以建立如下組:銷售部,采購部,辦公室,經理等。划分好組后,向組中添加組員(即具體的操作人員),一個組員可以隸屬於多個組。
第三步:為組分配權限,建立組與操作碼之間的關系,一個組可以有任意多個操作碼,一個操作碼可以分配給多個組,一旦為組分配了權限,組中的成員也就具有了該權限。
4.界面操作
下面介紹一下權限系統的具體操作。
主界面
第一步:為系統划分模塊、功能和操作
模塊的管理界面如下圖:
功能的管理界面如下圖:
操作的管理界面如下圖:
第二步:對操作用戶分組管理
用戶和組的操作界面
圖表 6本地用戶和組
用戶管理的操作界面
用戶隸屬組
組的管理界面如下圖:
組的成員管理
添加成員如下圖:
第三步:為組分配權限
說明:權限模塊生成的動態庫名為HF.Permission.dll(UI類)和HF.Permission.Data.dll(業務類),界面管理掛接到C/S的應用平台上,如下圖:
判斷是否具有權限的方法:
private void btnDeletecmd_Click(object sender, EventArgs e)
{
if (PowerData.IsPower("leg", "000000"))//leg是當前登錄用戶的id,000000是當前按鈕的操作碼
{
WorkDialog.WarningDlg("權限驗證通過!", "提示");
}
else
{
WorkDialog.WarningDlg("沒有權限!", "提示");
}
}
組織機構和權限管理是流程系統不可缺少的,但是比較簡單,下一節我們介紹流程設計器,這是BPM的難點也是核心。