激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - ASP.NET教程 - asp.net+sqlserver實(shí)現(xiàn)的簡(jiǎn)單高效的權(quán)限設(shè)計(jì)示例

asp.net+sqlserver實(shí)現(xiàn)的簡(jiǎn)單高效的權(quán)限設(shè)計(jì)示例

2019-09-01 11:22ASP.NET之家 ASP.NET教程

大部分系統(tǒng)都有權(quán)限系統(tǒng)。一般來說,它能管控人員對(duì)某個(gè)否頁面的訪問;對(duì)某些字段、控件可見或者不可見。對(duì)gridview中的數(shù)據(jù)是否可刪除、可添加、可新增等等。

大部分系統(tǒng)都有權(quán)限系統(tǒng)。一般來說,它能管控人員對(duì)某個(gè)否頁面的訪問;對(duì)某些字段、控件可見或者不可見。對(duì)gridview中的數(shù)據(jù)是否可刪除、可添加、可新增等等。大部分人都把權(quán)限作為一個(gè)子系統(tǒng)獨(dú)立出來。但是這里我不是想設(shè)計(jì)一個(gè)權(quán)限管理系統(tǒng),網(wǎng)上的設(shè)計(jì)方案太多了,可以說每個(gè)開發(fā)人員都有自己的開發(fā)權(quán)限管理系統(tǒng)的想法和思路。 
在這篇文章中,我先用簡(jiǎn)單的C#代碼模仿一個(gè)用戶的權(quán)限,再使用sql去模擬。這是一種很簡(jiǎn)單,很直觀,很高效的方式去判定用戶的權(quán)限。 
C#: 
好吧,先從最簡(jiǎn)單開始,定義一個(gè)用戶(User)類,如下。 

復(fù)制代碼代碼如下:


class User 

bool CanDelete; 
bool CanRead; 
bool CanWrite; 
bool CanModify; 
bool CanCreate; 


這里設(shè)計(jì)5個(gè)屬性來管控用戶的權(quán)限。我發(fā)現(xiàn)這樣雖然很直觀,但是不宜擴(kuò)張。我們將權(quán)限獨(dú)立出來,在看下面代碼: 

復(fù)制代碼代碼如下:


enum PermissionTypes : int 

None = 0, 
Read = 1, 
Write = 2, 
Modify = 4, 
Delete = 8, 
Create = 16, 
All = Read | Write | Modify | Delete | Create 

class User 

public PermissionTypes Permissions = PermissionTypes.None; 


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

復(fù)制代碼代碼如下:


//創(chuàng)建一個(gè)用戶 
User admin = new User(); 
admin.Permissions = PermissionTypes.Read 
| PermissionTypes.Write 
| PermissionTypes.Delete; 
//驗(yàn)證權(quán)限 
bool canRead = ((PermissionTypes.Read & admin.Permissions) == PermissionTypes.Read); 
bool canWrite = ((PermissionTypes.Write & admin.Permissions) == PermissionTypes.Write); 
bool canCreate = ((PermissionTypes.Create & admin.Permissions) == PermissionTypes.Create); 
//查看結(jié)果 
Console.WriteLine(canRead); //true 
Console.WriteLine(canWrite); //true 
Console.WriteLine(canCreate); //false 


利用了'|'和'&'兩個(gè)操作。但是這樣看起來很是很別捏,初始化權(quán)限和驗(yàn)證權(quán)限用了一長(zhǎng)串'|'和'&'運(yùn)算的代碼。很不直觀。我在System.Enum中擴(kuò)展一些方法供你調(diào)用,代碼如下。 

復(fù)制代碼代碼如下:


//是否存在權(quán)限 
public static bool Has<T>(this System.Enum type, T value) 

try 

return (((int)(object)type & (int)(object)value) == (int)(object)value); 

catch 

return false; 


//判斷權(quán)限 
public static bool Is<T>(this System.Enum type, T value) 

try 

return (int)(object)type == (int)(object)value; 

catch 

return false; 


//添加權(quán)限 
public static T Add<T>(this System.Enum type, T value) 

try 

return (T)(object)(((int)(object)type | (int)(object)value)); 

catch (Exception ex) 

throw new ArgumentException( 
string.Format( 
"不能添加類型 '{0}'", 
typeof(T).Name 
), ex); 


//移除權(quán)限 
public static T Remove<T>(this System.Enum type, T value) 

try 

return (T)(object)(((int)(object)type & ~(int)(object)value)); 

catch (Exception ex) 

throw new ArgumentException( 
string.Format( 
"不能移除類型 '{0}'", 
typeof(T).Name 
), ex); 


使用一下: 

復(fù)制代碼代碼如下:


//創(chuàng)建一個(gè)用戶 
User admin = new User(); 
PermissionTypes permissions = new PermissionTypes(); 
admin.Permissions = permissions; 
//添加權(quán)限 
admin.Permissions = admin.Permissions.Add(PermissionTypes.Create); 
admin.Permissions = admin.Permissions.Add(PermissionTypes.Read); 
admin.Permissions = admin.Permissions.Add(PermissionTypes.Write); 
//判斷權(quán)限 
bool canRead = admin.Permissions.Has(PermissionTypes.Read); //true 
bool canWrite = admin.Permissions.Has(PermissionTypes.Write); //true 
bool canDelete = admin.Permissions.Has(PermissionTypes.Delete); //false 
bool canCreate = admin.Permissions.Has(PermissionTypes.Create); //true 
Console.WriteLine(canRead); //true 
Console.WriteLine(canWrite); //true 
Console.WriteLine(canDelete); //false 
Console.WriteLine(canCreate); //true 
Console.Read(); 


SQL: 
大部分權(quán)限管理都是數(shù)據(jù)庫的操作,好依照上面的思路,我在sqlserver里面模擬一下以上的操作,在sql中與或運(yùn)算是很高效的。先設(shè)計(jì)兩張表User和Permission。 

asp.net+sqlserver實(shí)現(xiàn)的簡(jiǎn)單高效的權(quán)限設(shè)計(jì)示例

 

asp.net+sqlserver實(shí)現(xiàn)的簡(jiǎn)單高效的權(quán)限設(shè)計(jì)示例
1、獲取有Read權(quán)限的所有用戶: 

復(fù)制代碼代碼如下:

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


Result: 
asp.net+sqlserver實(shí)現(xiàn)的簡(jiǎn)單高效的權(quán)限設(shè)計(jì)示例
2、獲取有Delete權(quán)限的所有用戶: 

復(fù)制代碼代碼如下:

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


Result: 
asp.net+sqlserver實(shí)現(xiàn)的簡(jiǎn)單高效的權(quán)限設(shè)計(jì)示例
3、判斷麒麟是否有有Delete權(quán)限 

復(fù)制代碼代碼如下:


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


Result: flase
作者:朱祁林

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 嗯~啊~弄嗯~啊h高潮视频 | 色婷婷一区二区三区 | 欧美成人午夜 | 91在线视频网址 | 九色一区二区 | 成人在线观看小视频 | 精品黑人一区二区三区国语馆 | 性生活视频网站 | 日韩黄色av网站 | 久久网页| 亚洲成人精品在线 | 久久草草影视免费网 | 午夜久久电影 | 成人免费自拍视频 | 亚洲欧美成aⅴ人在线观看 av免费在线播放 | 曰韩av在线| 日韩精品一区二区三区中文 | 中文字幕线观看 | 91短视频版高清在线观看www | 成人视屏在线观看 | 电视剧全部免费观看 | 亚洲一二区视频 | 成人mm视频在线观看 | 黄色影院在线观看视频 | 一本色道久久久888 青青草好吊色 | 影视免费观看 | 黄色免费在线网址 | 午夜久久电影 | 免费播放欧美毛片 | 日韩一级免费毛片 | 亚洲欧美日韩久久精品第一区 | 欧美日韩免费一区 | 黄色av网站在线观看 | 国产精品国产三级国产在线观看 | 中文字幕在线观看视频一区 | 精品视频在线免费看 | 日韩在线播放一区二区 | 九九看片 | 成人在线视频免费观看 | av中文一区| 亚洲一区二区三区四区精品 |