基於Newlife.XCode的權限系統(含數據集權限)【設計篇】


      本博客所有文章分類的總目錄:http://www.cnblogs.com/asxinyu/p/4288836.html

Newlife XCode組件相關文章目錄:http://www.cnblogs.com/asxinyu/p/4329747.html

  權限管理在一個系統的開發中必不可少的部分,說重要也很重要,說不重要當然也沒多少人重視。說有技術含量,但也還真有點技術含量,比如博客園吉日大哥的權限系統,我也用過,不得不佩服。當然很多人也認為沒什么技術含量,自己的系統中也都有這么個東西,也都能滿足實際需求。
       我不是專門搞開發的,所以有些東西可能偏離時間的軌道。請諒解。一直對權限系統比較感興趣,也一直想打造一個屬於自己的權限管理組件,能隨心所欲的進行權限控制。我的目標是“除了普通的訪問控制權限之外,還要對每個表每條記錄的每個字段進行授權控制,另外要足夠小和簡單”不說廢話了,先看數據庫表結構設計,然后講解思路:

1.權限管理的幾個核心表是:用戶表,角色表,權限表,用戶角色表,用戶權限表,角色權限表;
2.下面是數據庫設計的初步版本,可能在必填和默認值上面還有些小錯誤,不過沒關系,主要先看思路;

User: 用戶表

中文名

英文名

字段名

數據類型

大小

主鍵

唯一

必填

默認值

編號

Id

Id

Int32

10

 

用戶名

UserName

UserName

String

30

 

 

 

密碼

Password

Password

String

50

 

 

 

排序碼

SortCode

SortCode

Int32

10

 

 

 

 

是否有效

IsEnable

IsEnable

SByte

3

 

 

 

1

 

Role: 角色表 

中文名

英文名

字段名

數據類型

大小

主鍵

唯一

必填

默認值

編號

Id

Id

Int32

10

 

角色名稱

RoleName

RoleName

String

20

 

 

 

角色分類

Category

Category

String

30

 

 

 

 

排序碼

SortCode

SortCode

Int32

10

 

 

 

9999

是否有效

IsEnable

IsEnable

SByte

3

 

 

1

備注

Description

Description

String

50

 

 

 

 
 

Permission: 權限表 

中文名

英文名

字段名

數據類型

大小

主鍵

唯一

必填

默認值

編號

Id

Id

Int32

10

 

父編號

ParentId

ParentId

Int32

10

 

 

 

數據庫表名稱

DbTable

DbTable

String

50

 

 

 

 

權限名稱

Name

Name

String

30

 

 

 

是否開啟數據權限

IsDataPermission

IsDataPermission

SByte

3

 

 

 

0

數據條件

Constraint

Constraint

String

100

 

 

 

 

排序碼

SortCode

SortCode

Int32

10

 

 

 

9999

是否有效

IsEnable

IsEnable

SByte

3

 

 

1

備注

Description

Description

String

50

 

 

 

 
 
UserRole:  用戶角色表 

中文名

英文名

字段名

數據類型

大小

主鍵

唯一

必填

默認值

編號

Id

Id

Int32

10

 

用戶編號

UserId

UserId

Int32

10

 

 

 

角色編號

RoleId

RoleId

Int32

10

 

 

 
  UserPermission:  用戶權限表 

中文名

英文名

字段名

數據類型

大小

主鍵

唯一

必填

默認值

編號

Id

Id

Int32

10

 

權限編號

PermissionId

PermissionId

Int32

10

 

 

 

用戶編號

UserId

UserId

Int32

10

 

 

 
 

RolePermission: 角色權限表 (RolePermission) 

中文名

英文名

字段名

數據類型

大小

主鍵

唯一

必填

默認值

編號

Id

Id

Int32

10

 

角色編號

RoleId

RoleId

Int32

10

 

 

 

權限編號

PermissionId

PermissionId

Int32

10

 

 

 
 
基本說明
1.用戶表,角色表,用戶角色表很簡單,就不用介紹了,它們是多對多的關系。

2 用戶權限和角色權限就是權限的分配了,如果用戶及其角色具有某一個權限,則具有相應的訪問權限。
3.權限表,這個是核心,我覺得我的簡潔之處也就是在這里。着重介紹:   
  • 權限表是樹形的,權限的根節點是以數據庫名稱來划分,權限是以數據庫的數據表為單位的。
  • 所以,權限表有一個字段名為DbTable,這個字段是的含義是“數據庫名稱+數據表名稱”,作用是這樣的:
  • 絕大部分權限都是和數據庫中某個表相關的,所以這里數據表是主要的權限單位
  • 每個數據庫的數據表系統默認6種數據權限:添加、刪除、修改、查詢、菜單、全局數據權限
  • 也就是說每個數據表都有6個默認的子權限節點,該類型的權限節點是可以自定義的,比如新增一個
  • 數據權限只能在數據表下的5種權限中添加,比如要給 刪除添加 數據權限,則在當前表的 刪除權限下添加子節點,同時打開父節點的數據權限開關。
  • 當然你也可以自定義一個根節點,來自定義你的相關權限。

比如上面這張簡單的示意圖,是每個表都有的權限結構,數據權限只能在 增加,刪除,修改,查詢和全局數據權限5個地方定義,並且這5個權限,若要添加子節點,只能是數據權限。

1.全局數據權限是為了方便數據權限的定義而設置的,比如增刪查改,如果都要對某一個字段進行限制,那么只需要在全局里面定義就可以了,沒必要到每個增刪查改權限中去添加。

2. 關於自定義權限,自定義權限也可以放在任何地方,只要方便你自己就行。比如可以將自定義權限放在表下面,如果有一個表 按鈕,或者 菜單,你想添加權限控制,但又和增刪查改不完全相干,那你可以在這里自定義一個權限。 

3.若定義數據權限,則將約束條件放在Constraint中,然后將數據權限授予角色或者用戶。

 4.其實用戶權限表某種時候是不必要的,用戶是屬於角色的,只要定義角色權限即可,但為了某些臨時需求,臨時賦予某些用戶一些權限,所以增加了用戶權限表。

      本權限系統基於Newlife.Xcode,數據權限的實現,就是在對實體進行增刪查改時進行條件過濾,目前已經完成40%的開發工作。最近搬家,7月份還要去上海培訓,所以最近一段時間是沒時間做了,今天在群里面看見有人討論數據權限,所以就趁機把自己的思路寫下來。可能比較混亂,希望大家在論壇或者群里面討論。本文對於的論壇地址為:

基於Newlife.Xcode的權限系統 歡迎討論
http://bbs.53wb.com/forum.php?mod=viewthread&tid=196&fromuid=28

Newlife.Xcode的資源:

1.QQ群:1600800

2.博客:http://www.cnblogs.com/nnhy/ 

             http://www.cnblogs.com/asxinyu/

3.論壇:http://www.53wb.com/

4.開源:http://xcode.codeplex.com/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM