欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
一種簡(jiǎn)單的直觀(guān)的高效的權限設計
 大部分系統都有權限系統。一般來(lái)說(shuō),它能管控人員對某個(gè)否頁(yè)面的訪(fǎng)問(wèn);對某些字段、控件可見(jiàn)或者不可見(jiàn)。對gridview中的數據是否可刪除、可添加、可新增等等。大部分人都把權限作為一個(gè)子系統獨立出來(lái)。但是這里我不是想設計一個(gè)權限管理系統,網(wǎng)上的設計方案太多了,可以說(shuō)每個(gè)開(kāi)發(fā)人員都有自己的開(kāi)發(fā)權限管理系統的想法和思路。

   在這篇文章中,我先用簡(jiǎn)單的C#代碼模仿一個(gè)用戶(hù)的權限,再使用sql去模擬。這是一種很簡(jiǎn)單,很直觀(guān),很高效的方式去判定用戶(hù)的權限。

C#:

   好吧,先從最簡(jiǎn)單開(kāi)始,定義一個(gè)用戶(hù)(User)類(lèi),如下。

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

    這里設計5個(gè)屬性來(lái)管控用戶(hù)的權限。我發(fā)現這樣雖然很直觀(guān),但是不宜擴張。我們將權限獨立出來(lái),在看下面代碼:

 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     }

    我們先試用一下,你就能感覺(jué)到神奇之處:

 1 //創(chuàng )建一個(gè)用戶(hù)
 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 

    利用了'|'和'&'兩個(gè)操作。但是這樣看起來(lái)很是很別捏,初始化權限和驗證權限用了一長(cháng)串'|'和'&'運算的代碼。很不直觀(guān)。我在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                         "不能添加類(lèi)型 '{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                         "不能移除類(lèi)型 '{0}'",
54                         typeof(T).Name
55                         ), ex);
56             }
57         }

 

使用一下:

 1            //創(chuàng )建一個(gè)用戶(hù)
 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權限的所有用戶(hù):

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

Result:

2、獲取有Delete權限的所有用戶(hù):

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

 

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
C#學(xué)習筆記(五)——面向對象與類(lèi)型基礎
多線(xiàn)程中的lock,Monitor.Wait和Monitor.Pulse
條款9:理解幾個(gè)相等判斷之間的關(guān)系
C#日志記錄設計與實(shí)現(BenXHLog)
關(guān)于lock(this)的說(shuō)明及用法
淺析C#中的“==”和Equals
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久