快一年沒寫博客了,這段時間感覺好迷茫,寫點博客,記錄一下自己的成長過程,希望對大家也有幫助
先上圖

一個用戶可以有多個角色,一個用戶可以屬於多個部門,這些都可以控制到權限,有時特殊要求,同樣的部門和角色不一定有同樣的權限(雖然可以定義多個角色來實現,但是如果這種情況多了就有點麻煩了),所以還弄了個基於用戶的權限,這樣就可以很靈活的控制了。
每個模塊的包含那些可控制的權限,用一個int類型字段控制,下邊用一個枚舉位標示出了系統所有的可能的權限(根據實際情況)
using System;
namespace Mydream.Permission.Common
{
[Flags]
public enum Authority : int
{
/// <summary>
/// 瀏覽權限
/// </summary>
Index = 1,
/// <summary>
/// 添加權限
/// </summary>
Add = 2,
/// <summary>
/// 編輯權限
/// </summary>
Edit = 4,
/// <summary>
/// 刪除權限
/// </summary>
Delete = 8,
/// <summary>
/// 搜索權限
/// </summary>
Search = 16,
/// <summary>
/// 審核權限
/// </summary>
Verify = 32,
/// <summary>
/// 移動權限
/// </summary>
Move = 64,
/// <summary>
/// 打印權限
/// </summary>
Print = 128,
/// <summary>
/// 下載權限
/// </summary>
Download = 256,
/// <summary>
/// 備份權限
/// </summary>
Backup = 512,
/// <summary>
/// 授權權限
/// </summary>
Grant = 1024,
/// <summary>
/// 查看詳細權限
/// </summary>
View = 2048,
/// <summary>
/// 導出權限
/// </summary>
Export = 4096
}
}
這些枚舉值全部用的2的次冪,之所有這樣賦值,是為了用2進制來控制權限
比如某個模塊(模塊A)有瀏覽、添加、編輯、刪除、打印的權限,那么這個模塊的int值=Index|Add|Edit|Delete|Print
00000001(Index=2^0=1)
00000010 (Add=2^1=2)
00000011 3
00000100(Edit=2^2=4)
00000111 7
00001000(Delete=2^3=8)
00001111 15
1000000 (Print=2^7=128)
10001111 143
最后的值其實就是1+2+4+8+128=143 所以這個模塊對應的權重就是143(這個只是說明這個模塊包含哪些功能)
如果一用戶屬於角色A,角色A包含模塊A中的瀏覽和添加權限(1+4=5),那么這個角色A 就對應了 (角色A的ID 模塊A的ID 權重=5)
我們的Action的命名按照枚舉那樣命名,然后每次操作的時候用這個權限INT值,然后if(INT值&Action命名的枚舉==Action命名的枚舉)如果為True說明有執行這個Action的權限
由於權限管理系統還在業余學習研究中,很多還沒有實現,上面主要講解了數據庫的設計,后邊的實現會慢慢呈現,最近都很忙,也沒怎么寫這個業余學習的例子了,后續有更新會慢慢放上來,寫得不好請包涵,如有好的意見請賜教,謝謝!
