亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

一種簡單的直觀的高效的權限設計

系統 1625 0

?大部分系統都有權限系統。一般來說,它能管控人員對某個否頁面的訪問;對某些字段、控件可見或者不可見。對gridview中的數據是否可刪除、可添加、可新增等等。大部分人都把權限作為一個子系統獨立出來。但是這里我不是想設計一個權限管理系統,網上的設計方案太多了,可以說每個開發人員都有自己的開發權限管理系統的想法和思路。

?? 在這篇文章中,我先用簡單的C#代碼模仿一個用戶的權限,再使用sql去模擬。這是一種很簡單,很直觀,很高效的方式去判定用戶的權限。

C#:

???好吧,先從最簡單開始,定義一個用戶(User)類,如下。

1 ? class ?User?
2 ? {
3 ? ???? bool ?CanDelete;
4 ? ???? bool ?CanRead;
5 ? ???? bool ?CanWrite;
6 ? ???? bool ?CanModify;
7 ? ???? bool ?CanCreate;
8 ? }

??? 這里設計5個屬性來管控用戶的權限。我發現這樣雖然很直觀,但是不宜擴張。我們將權限獨立出來,在看下面代碼:

?1 ? ???? enum ?PermissionTypes?:? int ?
?2 ? ????{
?3 ? ????????None? = ? 0 ,
?4 ? ????????Read? = ? 1 ,
?5 ? ????????Write? = ? 2 ,
?6 ? ????????Modify? = ? 4 ,
?7 ? ????????Delete? = ? 8 ,
?8 ? ????????Create? = ? 16 ,
?9 ? ????????All? = ?Read? | ?Write? | ?Modify? | ?Delete? | ?Create
10 ? ????}
11 ? ???? class ?User?
12 ? ????{
13 ? ??????? public ?PermissionTypes?Permissions? = ?PermissionTypes.None;
14 ? ????}

??? 我們先試用一下,你就能感覺到神奇之處:

?1 ? // 創建一個用戶
?2 ? User?admin? = ? new ?User();
?3 ? admin.Permissions? = ?PermissionTypes.Read
?4 ? ???? | ?PermissionTypes.Write
?5 ? ???? | ?PermissionTypes.Delete;
?6 ?
?7 ? // 驗證權限
?8 ? bool ?canRead? = ?((PermissionTypes.Read? & ?admin.Permissions)? == ?PermissionTypes.Read);
?9 ? bool ?canWrite? = ?((PermissionTypes.Write? & ?admin.Permissions)? == ?PermissionTypes.Write);
10 ? bool ?canCreate? = ?((PermissionTypes.Create? & ?admin.Permissions)? == ?PermissionTypes.Create);
11 ?
12 ? // 查看結果
13 ? Console.WriteLine(canRead);? // true
14 ? Console.WriteLine(canWrite);? // true
15 ? Console.WriteLine(canCreate);? // false
16 ?

??? 利用了' |' 和' & '兩個操作。但是這樣看起來很是很別捏,初始化權限和驗證權限用了一長串'|'和'&'運算的代碼。很不直觀。我在System.Enum中擴展一些方法供你調用,代碼如下。

?

?1 ? ?? // 是否存在權限
?2 ? ???????? public ? static ? bool ?Has < T > ( this ?System.Enum?type,?T?value)
?3 ? ????????{
?4 ? ???????????? try
?5 ? ????????????{
?6 ? ???????????????? return ?((( int )( object )type? & ?( int )( object )value)? == ?( int )( object )value);
?7 ? ????????????}
?8 ? ???????????? catch
?9 ? ????????????{
10 ? ???????????????? return ? false ;
11 ? ????????????}
12 ? ????????}
13 ? ???????? // 判斷權限
14 ? ???????? public ? static ? bool ?Is < T > ( this ?System.Enum?type,?T?value)
15 ? ????????{
16 ? ???????????? try
17 ? ????????????{
18 ? ???????????????? return ?( int )( object )type? == ?( int )( object )value;
19 ? ????????????}
20 ? ???????????? catch
21 ? ????????????{
22 ? ???????????????? return ? false ;
23 ? ????????????}
24 ? ????????}
25 ? ???????? // 添加權限
26 ? ???????? public ? static ?T?Add < T > ( this ?System.Enum?type,?T?value)
27 ? ????????{
28 ? ???????????? try
29 ? ????????????{
30 ? ???????????????? return ?(T)( object )((( int )( object )type? | ?( int )( object )value));
31 ? ????????????}
32 ? ???????????? catch ?(Exception?ex)
33 ? ????????????{
34 ? ???????????????? throw ? new ?ArgumentException(
35 ? ???????????????????? string .Format(
36 ? ???????????????????????? " 不能添加類型?'{0}' " ,
37 ? ???????????????????????? typeof (T).Name
38 ? ????????????????????????),?ex);
39 ? ????????????}
40 ? ????????}
41 ?
42 ? ???????? // 移除權限
43 ? ???????? public ? static ?T?Remove < T > ( this ?System.Enum?type,?T?value)
44 ? ????????{
45 ? ???????????? try
46 ? ????????????{
47 ? ???????????????? return ?(T)( object )((( int )( object )type? & ? ~ ( int )( object )value));
48 ? ????????????}
49 ? ???????????? catch ?(Exception?ex)
50 ? ????????????{
51 ? ???????????????? throw ? new ?ArgumentException(
52 ? ???????????????????? string .Format(
53 ? ???????????????????????? " 不能移除類型?'{0}' " ,
54 ? ???????????????????????? typeof (T).Name
55 ? ????????????????????????),?ex);
56 ? ????????????}
57 ? ????????}

?

使用一下:

?1 ? ??????????? // 創建一個用戶
?2 ? ????????????User?admin? = ? new ?User();
?3 ? ????????????PermissionTypes?permissions? = ? new ?PermissionTypes();
?4 ? ????????????admin.Permissions? = ?permissions;
?5 ? ???????????? // 添加權限
?6 ? ????????????admin.Permissions? = ?admin.Permissions.Add(PermissionTypes.Create);
?7 ? ????????????admin.Permissions? = ?admin.Permissions.Add(PermissionTypes.Read);
?8 ? ????????????admin.Permissions? = ?admin.Permissions.Add(PermissionTypes.Write);
?9 ? ??????????? // 判斷權限
10 ? ???????????? bool ?canRead? = ?admin.Permissions.Has(PermissionTypes.Read);? // true
11 ? ???????????? bool ?canWrite? = ?admin.Permissions.Has(PermissionTypes.Write);? // true
12 ? ???????????? bool ?canDelete? = ?admin.Permissions.Has(PermissionTypes.Delete);? // false
13 ? ???????????? bool ?canCreate? = ?admin.Permissions.Has(PermissionTypes.Create);? // true
14 ?
15 ? ????????????Console.WriteLine(canRead);? // true
16 ? ????????????Console.WriteLine(canWrite);? // true
17 ? ????????????Console.WriteLine(canDelete);? // false
18 ? ????????????Console.WriteLine(canCreate);? // true
19 ? ????????????Console.Read();

SQL:

??? 大部分權限管理都是數據庫的操作,好依照上面的思路,我在sqlserver里面模擬一下以上的操作,在sql中與或運算是很高效的。先設計兩張表User和Permission。

一種簡單的直觀的高效的權限設計

?

一種簡單的直觀的高效的權限設計

1、獲取有Read權限的所有用戶:

1 ? select ? * ? from ? [ User ] ? where ?PermissionTypes & 1 ? = 1 ?

Result:

一種簡單的直觀的高效的權限設計

2、獲取有Delete權限的所有用戶:

1 ? select ? * ? from ? [ User ] ? where ?PermissionTypes & 8 ? = 8

Result:

3、判斷麒麟是否有有Delete權限

1 ? if ?? exists ?( select ? * ? from ? [ User ] ? where ?Name = ' qilin ' ? and ??PermissionTypes & 8 ? = 8 )
2 ???? print ? ' true '
3 ? else
4 ???? print ? ' flase '

Result: flase

?

一種簡單的直觀的高效的權限設計


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 成人午夜视频在线播放 | 欧美日韩一区二区在线观看视频 | 欧美国产日韩一区二区三区 | 四虎国产视频 | 日韩欧美亚洲中字幕在线播放 | 亚洲国产一区二区三区a毛片 | 激情网址大全 | 羞羞网站免费观看 | 天天综合天天添夜夜添狠狠添 | 精品国产网 | 亚洲色四在线视频观看 | 99久久精品国产一区二区三区 | 一本久久道 | 国产网红福利 | 性www| 成人黄色一级片 | 精品推荐 国产 | 精品成人毛片一区二区视 | 92国产福利久久青青草原 | 欧美激情在线观看一区二区三区 | 欧美成人精品高清在线观看 | 亚洲国产精品高清在线一区 | 在线欧美一级毛片免费观看 | 久久精品国产亚洲精品 | 欧美一级网 | 婷婷色在线 | 日本不卡视频免费的 | 四虎视频在线精品免费观看 | 欧美成人怡红院在线观看 | 日本人一级毛片免费视频 | 青草青青在线视频观看 | 欧美午夜性春 | 欧美国产伦久久久久 | 青青热久免费精品视频精品 | 亚洲国产精久久小蝌蚪 | 欧美高清一区二区三 | 国产瑟瑟| 人人干天天干 | 麻豆国产在线不卡一区二区 | 亚洲免费资源 | 性欧美极品xxxx欧美一区二区 |