权限管理系统之组织管理
概述
基于角色的用戶權限管理系統(RBAC)是目前公認的解決大型企業的統一資源訪問控制的有效方法。
本套權限管理組件不局限于傳統的權限,角色,用戶三者的關系,在減小授權管理的復雜性基礎上,通過獨特的允許、禁止資源控制思想,增強了授權的靈活性。既可以按照角色統一授權,也可以對人員獨立授權。權限可粗粒度的分為模塊權限,亦可細化到具體操作資源和功能(菜單、按鈕、數據)。能夠指根據系統管理員設置的安全規則或者安全策略,能夠達到使用戶可以訪問且只能訪問自己被授權的資源,并拒絕訪問被禁止的指定資源。
平臺配合提供了業務系統常用字典管理功能,可通過可視化的操作和維護,能快速操作平臺上的字典數據。整個數據字典數據為框架平臺所共享,有效提高了數據的重復利用率和產品、項目的開發效率。
這是一套通用的權限組件框架,適用于C/S、B/S架構的企業級應用系統。提供了基礎的權限控制和資源管理功能,因此可以作為業務系統、辦公系統或門戶網站系統的實現參考指南,也可以通過調用該系統組件中的接口來完成集成。
主要包括以下功能模塊:系統代碼管理、模塊管理、角色管理、組織管理、職員管理和用戶信息管理。
功能導航區(用戶模塊)如下圖4-1所示:
圖4-1 權限管理功能導航區
4.3 組織管理
有人的地方,就有江湖。
組織管理或許是權限管理系統中四大模塊里最容易理解和實現的內容。
從廣義上說,組織是指由諸多要素按照一定方式相互聯系起來的系統。
從狹義上說,組織就是指人們為實現一定的目標互相協作結合而成的集體或團體。狹義的組織專門指人群而言,運用于社會管理之中。在現代社會生活中.組織是人們按照一定的目的、任務和形式編制起來的社會集團,組織不僅是社會的細胞、社會的基本單元,而且可以說是社會的基礎。
從管理學的角度來說,組織是人們為了某一目的而形成的群體,是確保人們社會活動正常協調進行、順利達到預期目標的體系。
它按照一定的規則和程序構成的一種責權結構安排和人事安排,其目的在于確保以最高的效率實現組織目標。組織管理模塊提供直觀、方便的組織機構管理,以樹型結構的可視化形式顯示了各組織之間(機構、部門)的關系。
組織(機構、部門)管理的功能作業區(用戶操作)界面如下圖4.3-1所示,通過主要的操作按鈕和信息內容可知其功能有:新增組織,編輯組織,刪除組織,移動組織,組織排序等。其中功能操作按鈕的狀態會根據選擇的左側樹型中不同節點和不同登錄用戶的動作權限而改變。平臺在理論和實現上支持了無限遞歸的樹型組織結構,可根據實際需要進行添加、修改、刪除或移動等對組織機構進行調整處理。
圖4.3-1 組織管理界面
樹形的組織機構代碼核心算法主要由以下代碼完成:
1 #region LoadDepartments
2 private void LoadDepartments(TreeNode currentNode, DMESYS_DEPARTMENT currentDept)
3 {
4 List<DMESYS_DEPARTMENT> subDepartments = null;
5 if (currentDept != null)
6 subDepartments = DBOSYS_DEPARTMENT.GetSubDepartments(currentDept);
7 else
8 subDepartments = DBOSYS_DEPARTMENT.GetAllTopDepartments();
9
10 foreach (DMESYS_DEPARTMENT d in subDepartments)
11 {
12 TreeNode node = currentNode.ChildNodes.Add();
13 node.Tag = d;
14 node.Text = d.Name;
15 node.CollapsedImageIndex = 1;
16 node.ExpandedImageIndex = 2;
17
18 LoadDepartments(node, d); //遞歸
19 }
20 }
21 #endregion
該算法主要是通過遞歸的方式加載組織機構的樹形菜單。
組織機構的數據模型層DML中實體類都實現了序列化,實體類DMESYS_DEPARTMENT具體實現定義代碼如下:
1 [Serializable, Class("DMESYS_DEPARTMENT", "Id")]
2 public class DMESYS_DEPARTMENT : DMEBase, IEquatable<DMESYS_DEPARTMENT>
3 {
4 #region Private Members
5 private string _id;
6 private string _parent_id;
7 .........
194 }
組織機構的數據訪問層DAL中訪問操作類都實現了序列化,訪問操作類DBOSYS_DEPARTMENT具體實現定義代碼如下:
1 public class DBOSYS_DEPARTMENT
2 {
3 /// <summary>
4 /// 獲取所有頂層的部門實例。
5 /// </summary>
6 /// <returns>所有頂層的部門實例。</returns>
7 public static List<DMESYS_DEPARTMENT> GetAllTopDepartments()
8 {
9 string sql = "SELECT * FROM SYS_DEPARTMENT WHERE Parent_id IS NULL OR Parent_id = '' ORDER BY Order_id";
10 List<DMESYS_DEPARTMENT> deptList = new List<DMESYS_DEPARTMENT>();
11 List<IIdentifiedBase> iIBList = new List<IIdentifiedBase>();
12 DataTable dt = DBMsSqlManager.ExecuteDataTable(sql, DBOService.GetTableName(typeof(DMESYS_DEPARTMENT)));
13 iIBList = DBOService.DataTable2DMEList(dt, typeof(DMESYS_DEPARTMENT));
14 foreach (IIdentifiedBase iIB in iIBList)
15 {
16 deptList.Add(iIB as DMESYS_DEPARTMENT);
17 }
18 return deptList;
19 }
20
21 /// <summary>
22 /// 獲取子部門。
23 /// </summary>
24 /// <param name="parentDept">指定部門</param>
25 /// <returns>所有子部門實例</returns>
26 public static List<DMESYS_DEPARTMENT> GetSubDepartments(DMESYS_DEPARTMENT parentDept)
27 {
28 string subSql = String.Format("SELECT * FROM SYS_DEPARTMENT WHERE Parent_id = '{0}' ORDER BY Order_id", parentDept.Id);
29 List<DMESYS_DEPARTMENT> subDeptList = new List<DMESYS_DEPARTMENT>();
30 List<IIdentifiedBase> subIIBList = new List<IIdentifiedBase>();
31 DataTable subdt = DBMsSqlManager.ExecuteDataTable(subSql, DBOService.GetTableName(typeof(DMESYS_DEPARTMENT)));
32 subIIBList = DBOService.DataTable2DMEList(subdt, typeof(DMESYS_DEPARTMENT));
33 foreach (IIdentifiedBase subIIB in subIIBList)
34 {
35 subDeptList.Add(subIIB as DMESYS_DEPARTMENT);
36 }
37 return subDeptList;
38 }
4.3.1 新增、編輯和刪除
平臺自帶了一個根節點“組織機構”的概念,所有的組織(機構、部門、單位)都是該節點的子節點。組織機構并不是真實存在的頂級組織,無可操作意義。
對于組織機構的操作動作,在權限系統中定義了如下的枚舉類型,能夠有效的對操作進行統一判斷:
1 namespace FoQus.Rights
2 {
3 public enum Action
4 {
5 /// <summary>
6 /// 新增
7 /// </summary>
8 ADD,
9 /// <summary>
10 /// 編輯
11 /// </summary>
12 EDIT,
13 /// <summary>
14 /// 移動
15 /// </summary>
16 MOVE,
17 /// <summary>
18 /// 刪除
19 /// </summary>
20 DELETE
21 }
22 }
新增組織:點擊展開樹形菜單“組織機構”,可以看到平臺的各個組織目錄(機構、部門、單位)之間的情況。選擇根節點組織機構或者一個平臺已有組織后點擊“新增”按鈕,彈出如下圖4.3.1-1中所示操作界面:
圖4.3.1-1 新增組織
在新增組織的過程中,組織基礎信息中帶紅色星號標記“*”條目的名稱和排序ID是必填內容。另外可以設置聯系方式以及備注等內容。
編輯組織:這里主要是當涉及到需要修改組織基本信息(如組織名稱、排序位置、聯系方式、備注)時進行的編輯操作。
點擊展開樹形菜單“組織機構”,在組織目錄(機構、部門)下選擇一個已有的組織后點擊“編輯”按鈕,具體操作界面如下圖4.3.1-2中所示:
圖4.3.1-2 編輯組織
刪除組織:如果需要對平臺上的組織進行刪除,點擊展開樹形菜單“組織機構”,在組織下選擇一個組織后點擊“刪除”按鈕,下圖4.3.1-3中顯示了幾個典型的刪除組織操作時的提示對話框界面。
備注:對于擁有子組織的組織是無法直接刪除的,首先需要刪除下級組織;如果該組織目錄有下屬人員時,也將無法直接刪除。
圖4.3.1-3 刪除組織提示
4.3.2 移動組織
平臺上的組織在工作生產過程中可能會發生歸屬或者分組的變更,此時就需要涉及到對組織進行移動操作。
點擊展開樹形菜單“組織機構”,選擇一個組織后點擊“移動”按鈕,如下圖4.3.2-1所示,界面以動態樹形方式列出了當前平臺的組織結構,選擇需要移動到的目標組織,點擊確認,即可完成組織歸屬關系的調動。
圖4.3.2-1 移動組織
移動組織機構主要分為兩大動作,首先判斷移動目標的有效性,然后完成組織信息的更新。具體代碼如下:
1 private void TargetContainsDest(DMESYS_DEPARTMENT target, DMESYS_DEPARTMENT dest)
2 {
3
4 List<DMESYS_DEPARTMENT> subDepts = DBOSYS_DEPARTMENT.GetSubDepartments(target);
5 if (subDepts.Count > 0)
6 {
7 foreach (DMESYS_DEPARTMENT d in subDepts)
8 {
9 if (d.Id == dest.Id)
10 {
11 flag = true;
12 break;
13 }
14 if (DBOSYS_DEPARTMENT.GetSubDepartments(d).Count > 0)
15 {
16 foreach (DMESYS_DEPARTMENT d2 in subDepts)
17 {
18 TargetContainsDest(d2, dest);
19 }
20 }
21 }
22 }
23 }
24
25 private bool MoveDepartment()
26 {
27 if (tvOrgan.SelectedNode == tnRoot)
28 {
29 target.Parent_Id = "";
30 DBOSYS_DEPARTMENT.UpdateDMESYS_DEPARTMENT(target);
31 return true;
32 }
33
34 if (destObj != null)
35 {
36 DMESYS_DEPARTMENT dest = destObj as DMESYS_DEPARTMENT;
37 TargetContainsDest(target, dest);
38 if (target.Id != dest.Id && !flag)
39 {
40 target.Parent_Id = dest.Id;
41 DBOSYS_DEPARTMENT.UpdateDMESYS_DEPARTMENT(target);
42 return true;
43 }
44 if (target.Id == dest.Id || flag)
45 {
46 lbTip.Visible = true;
47 }
48 }
49 lbTip.Visible = true;
50 return false;
51 }
總結
以上是生活随笔為你收集整理的权限管理系统之组织管理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 护眼色的RGB值和颜色代码
- 下一篇: 人人开源之代码生成器(renren-ge