您的位置:首页 > 编程语言 > C#

C# Enum 简易权限设计 使用FlagsAttribute属性

2015-09-11 11:42 846 查看

C#Enum简易权限设计使用FlagsAttribute属性

基本权限设计:

///<summary>

[code]///权限列举
///</summary>
[FlagsAttribute]
publicenumPermissions
{
[Description("未设定")]
None=0,
[Description("建立")]
Create=1,
[Description("读取")]
Read=2,
[Description("更新")]
Update=4,
[Description("刪除")]
Delete=8,
[Description("所有功能")]
All=Create|Read|Update|Delete
}

[/code]

技巧一:利用2的次方值,來作為列舉值以便日後做位元運算(&AND|OR^XOR)。

技巧二:現有權限中,加入新權限動作。(OR運算)

Permissionspermission=Permissions.None;

[code]permission=permission|Permissions.Create;
MessageBox.Show(permission.ToString());
//Result:Create

[/code]

技巧三:加入【FlagsAttribute】標籤

Permissionspermission=Permissions.None;

[code]permission=permission|Permissions.Create;
MessageBox.Show(permission.ToString());
//Result:Create([FlagsAttribute]不影響結果)
permission=permission|Permissions.Read;
MessageBox.Show(permission.ToString());
//Result:3(未加入[FlagsAttribute])
//Result:Create,Read(加入[FlagsAttribute])

[/code]

技巧四:現有權限中,移除某個權限動作。(XOR與AND運算應用)

Permissionspermission=Permissions.None;

[code]permission=permission|Permissions.Create;
MessageBox.Show(permission.ToString());
//Result:Create
permission=permission|Permissions.Read;
permission=permission|Permissions.Update;
MessageBox.Show(permission.ToString());
//Result:Create,Read,Update
permission=(permission&(Permissions.All^Permissions.Read));
MessageBox.Show(permission.ToString());
//Result:Create,Update

[/code]

技巧五:判斷現在權限中,是否擁有某個權限(AND運算)

Permissionspermission=Permissions.None;

[code]permission=permission|Permissions.Create;
MessageBox.Show(permission.ToString());
//Result:Create
permission=permission|Permissions.Read;
permission=permission|Permissions.Update;
MessageBox.Show(permission.ToString());
//Result:Create,Read,Update
permission=(permission&(Permissions.All^Permissions.Read));
MessageBox.Show(permission.ToString());
//Result:Create,Update
boolIsCreatable=false;
if((permission&Permissions.Create)==Permissions.Create)
{
IsCreatable=true;
}
else
{
IsCreatable=false;
}
MessageBox.Show(IsCreatable.ToString());
//Result:True

[/code]

簡易權限類別設計:


[code]

[/code]

簡易權限類別使用:


[code]

[/code]

from:http://www.dotblogs.com.tw/chhuang/archive/2008/04/26/3514.aspx
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: