不論什麼系統都離不開權限的管理,有一個好的權限管理模塊,不只使咱們的系統操做自如,管理方便,也爲系統加入亮點。spa
l 不一樣職責的人員,對於系統操做的權限應該是不一樣的。優秀的業務系統,這是最主要的功能。設計
l 可以對「組」進行權限分配。對於一個大企業的業務系統來講,假設要求管理員爲其下員工逐一分配系統操做權限的話,是件耗時且不夠方便的事情。因此,系統中就提出了對「組」進行操做的概念,將權限一致的人員編入同一組,而後對該組進行權限分配。日誌
l 權限管理系統應該是可擴展的。它應該可以增長到不論什麼帶有權限管理功能的系統中。就像是組件同樣的可以被不斷的重用,而不是每開發一套管理系統,就要針對權限管理部分進行又一次開發。orm
l 知足業務系統中的功能權限。傳統業務系統中,存在着兩種權限管理,其一是功能權限的管理,而第二種則是資源權限的管理,在不一樣系統之間,功能權限是可以重用的,而資源權限則不能。對象
針對OA系統的特色,權限說明:繼承
權限資源
在系統中,權限經過模塊+動做來產生,模塊就是整個系統中的一個子模塊,可能相應一個菜單,動做也就是整個模塊中(在B/S系統中也就是一個頁面的所有操做,比方「瀏覽、加入、改動、刪除」等)。將模塊與之組合可以產生此模塊下的所有權限。開發
權限組文檔
爲了更方便的權限的管理,另將一個模塊下的所有權限組合一塊兒,組成一個「權限組」,也就是一個模塊管理權限,包含所有基本權限操做。比方一個權限組(用戶管理),包含用戶的瀏覽、加入、刪除、改動、審覈等操做權限,一個權限組也是一個權限。字符串
角色
權限的集合,角色與角色之間屬於平級關係,可以將基本權限或權限組加入到一個角色中,用於方便權限的分配。
用戶組
將某一類型的人、具備一樣特徵人組合一塊兒的集合體。經過對組授予權限(角色),高速使一類人具備一樣的權限,來簡化對用戶授予權限的繁瑣性、耗時性。用戶組的劃分,可以按職位、項目或其餘來實現。用戶可以屬於某一個組或多個組。
經過給某我的賦予權限,有4種方式(參考飛思辦公系統)
A. 經過職位
a) 在職位中,職位成員的權限繼承當前所在職位的權限,對於下級職位擁有的權限不可繼承。
b) 實例中:如前臺這個職位,對於考勤查詢有權限,則可以經過對前臺這個職位設置考勤查詢的瀏覽權,使他們有使用這個對象的權限,而後再設置個,考勤查詢權(固然也可以不設置,默認能進此模塊的就能查詢),則所有前臺人員都擁有考勤查詢的權利。
B. 經過項目
a) 在項目中,項目成員的權限來自於所在項目的權限,他們相同不能繼承下級項目的權限,而對於項目組長,他對項目有全權,對下級項目也同樣。
b) 實例中:在項目中,項目成員可以對項目中上傳文檔,查看本項目的文檔,可以經過對項目設置一個對於本項目的瀏覽權來實現進口,這樣每個成員能訪問這個項目了,再加上項目文檔的上傳權和查看文檔權就能夠。
c) 對於組長,因爲可以賦予組長一個組長權(組長權是個特殊的權限,它包括其它各類權限的一個權限包),所有組長對於本項目有全權,則項目組長可以對於項目文檔查看,審批,刪除,恢復等,這些權限對於本項目的下級項目依舊有效。
C. 經過角色
a) 角色中的成員繼承角色的權限,角色與角色沒有上下級關係,他們是平行的。經過角色賦予權限,是指沒辦法按職位或項目的分類來賦予權限的還有一種方式,如:系統管理員,資料備份員…
b) 實例中:對於本系統中,全體人員應該默認都有的模塊,如個人郵件,個人文檔,個人日誌,個人考勤……,這些模塊系統成員都應該有的,咱們創建一個角色爲系統默認角色,把所有默認訪問的模塊的瀏覽權增長到裏面去,則系統成員都能訪問這些模塊。
D. 直接指定
a) 直接指定是經過對某我的詳細指定一項權限,使其有使用這個權限的能力。直接指定是角色指定的一個簡化版,爲了是在創建像某個項目的組長這樣的角色時,省略建立角色這一個步驟,使角色不至於過多。
b) 實例中:指定某個項目的組長,把組長權指定給某我的。
針對職位、項目組:
假設用加入新員工,員工調換職位、項目組,知足了員工會本身主動繼承所在職位、項目組的權限,不需要又一次分配權限的功能。
用戶管理
用戶可以屬於某一個或多個用戶組,可以經過對用戶組受權,來對組中的所有用戶進行權限的授予。一個用戶可以屬於多個項目組,或擔任多個職位。
受權管理
將一個基本權限或角色授予用戶或用戶組,使用戶或用戶組擁有授予權限的字符串,假設角色、職位、項目中存在一樣的基本權限,則取當中的一個;如脫離角色、職位、項目組,僅僅是取消用戶或用戶組的中此角色、職位、項目組所授予的權限。用戶所擁有的權限是所有途徑授予權限的集合。管理員用戶可以查看每個用戶的終於權限列表。
權限管理
基本操做權限與權限組(基本操做權限的集合)的管理。
物理數據模型圖例如如下:
依據以上設計思想,權限管理總共需要下面基本表:
tb_User:用戶信息基本表;
tb_Department:部門表;
tb_Company:公司表;
tb_Module:系統模塊表;
tb_Action:系統中所有操做的動做表;
tb_Permit:由tb_Module與tb_Action兩表結合產生的系統基本權限表;
tb_Permit_Group:權限組表,將一模塊的中的所有權限劃分一個權限組中,可以經過權限組授予用戶權限;
tb_Role:角色表,基本權限的集合。無上級與下級之分;
tb_Position:職位表,有上級與下級之分;
tb_Project:項目組表,
tb_Role_Permit:角色受權表;
tb_Postion_Permit:職位受權表;
tb_Project_Permit:項目受權表;
tb_Project_User:項目成員表,IsLead字段表明此成員爲項目組長;
tb_Postion_User:職位成員表;
tb_User_Permit:用戶受權表,用戶ID與角色、職位、項目及直接授予的權限串表;
權限的產生:
由tb_Module中的ModuleCode與tb_Action中的ActionCode組成
權限代碼PermitCode=ModuleCode+ActionCode。
實例:ModuleCode=0101,ActionCode=01,則PermitCode=010101。
權限值則有ModuleValue與ActionCode組合而成,採用下劃線來鏈接。
實例:ModuleValue=Sys_User,ActionValue=AdD,PermitValue= Sys_User_Add
權限組:
包含一組同一模塊下的權限的組合,如管理用戶包含主要的權限:加入、刪除、改動、查看等,將這些組合起來構成一個用戶組——「用戶管理」權限組。其餘相似。僅僅是爲了更方便的查看系統權限與權限的分配。
實例:如管理用戶的權限代碼爲010101à查看用戶,010102à加入用戶,010103à刪除用戶,010104à改動用戶,010105à審覈用戶等,將這些基本權限組合起來一個集合而構成了「用戶管理」權限組。
角色、職位、項目:
也就是按特定的需要劃分一種權限的集合。使用角色受權表、職位受權表、項目受權表來實現。受權表中存放的是權限代碼PermitCode,而不是權限組的GroupCode代碼。
用戶受權:
由用戶受權表來實現,用戶受權表中的RoleCode、PositionCode、ProjectCode各自是角色表中RoleCode組成的串、職位表PositionCode組成的串、ProjectCode組成的串。與角色受權表中的角色代碼RoleCode、職位受權表中PositionCode、項目受權表中的ProjectCode不正確應(不是主表與從表之間外鍵關係)。
從而能夠實現了一個用戶能夠擁有多個角色、多個職位、多個項目的狀況。
用戶受權表中的PermitCode爲直接受權的權限代碼串,直接給用戶分配權限。
實例:
用戶ID爲UserId=1的用戶權限受權表的記錄爲:
RoleCode=001,003
PostionCode = 001,002
ProjectCode=001,005
PermitCode = 010101,020102
代表此用戶擁有兩個角色,代碼爲001和003,並繼承這兩個角色的權限;
擔任兩個職位,代碼爲001與002,並繼承兩個職位的權限;
屬於兩個項目組中的成員,項目代碼爲001與005,並繼承兩個項目中的權限。
直接指定給用戶的權限爲010101與010102這兩個權限代碼的權限
用戶權限字符串:
依據用戶受權表的角色代碼、職位代碼、項目代碼獲得權限字符串及表中直接分配的權限字符串組合成一個用戶的所有權限字符串集合。