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

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

2013-11-12 15:46 405 查看
基本權限設計:

///<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]

簡易權限類別設計:

///<summary>

[code]///我的權限
///</summary>

publicclassMyPermission

{

privatePermissions_permission;

privatebool_isCreatable=false;

privatebool_isReadable=false;

privatebool_isUpdatable=false;

privatebool_isDeletable=false;


///<summary>

///權限

///</summary>

publicPermissionsPermission

{

get{return_permission;}

set

{

_permission=value;


IsCreatable=((value&Permissions.Create)==Permissions.Create)?true:false;

IsReadable=((value&Permissions.Read)==Permissions.Read)?true:false;

IsUpdatable=((value&Permissions.Update)==Permissions.Update)?true:false;

IsDeletable=((value&Permissions.Delete)==Permissions.Delete)?true:false;

}

}


///<summary>

///是否可建立?

///</summary>

publicboolIsCreatable

{

get{return_isCreatable;}

set

{

_isCreatable=value;


if(value)

{

AddPermissionFlag(Permissions.Create);

}

else

{

RemovePermissionFlag(Permissions.Create);

}

}

}


///<summary>

///是否可讀?

///</summary>

publicboolIsReadable

{

get{return_isReadable;}

set

{

_isReadable=value;


if(value)

{

AddPermissionFlag(Permissions.Read);

}

else

{

RemovePermissionFlag(Permissions.Read);

}

}

}


///<summary>

///是否可新增?

///</summary>

publicboolIsUpdatable

{

get{return_isUpdatable;}

set

{

_isUpdatable=value;


if(value)

{

AddPermissionFlag(Permissions.Update);

}

else

{

RemovePermissionFlag(Permissions.Update);

}

}

}


///<summary>

///是否可刪除?

///</summary>

publicboolIsDeletable

{

get{return_isDeletable;}

set

{

_isDeletable=value;


if(value)

{

AddPermissionFlag(Permissions.Delete);

}

else

{

RemovePermissionFlag(Permissions.Delete);

}

}

}


///<summary>

///現有權限中增加某個權限

///</summary>

///<paramname="addFlag">某個權限</param>

publicvoidAddPermissionFlag(PermissionsaddFlag)

{

_permission=_permission|addFlag;

}


///<summary>

///現有權限中移除某個權限

///</summary>

///<paramname="removeFlag">某權限</param>

publicvoidRemovePermissionFlag(PermissionsremoveFlag)

{

_permission=(_permission&(Permissions.All^removeFlag));

}

}

[/code]

簡易權限類別使用:


MyPermissionmp=newMyPermission();

[code]
mp.Permission=Permissions.Create;

//Create

MessageBox.Show(mp.Permission.ToString());


mp.AddPermissionFlag(Permissions.Read);

//Create,Read

MessageBox.Show(mp.Permission.ToString());


mp.IsUpdatable=true;

//Create,Read,Update

MessageBox.Show(mp.Permission.ToString());


mp.IsDeletable=true;

//All

MessageBox.Show(mp.Permission.ToString());


mp.RemovePermissionFlag(Permissions.Delete);

//Create,Read,Update

MessageBox.Show(mp.Permission.ToString());


mp.IsUpdatable=false;

//Create,Read

MessageBox.Show(mp.Permission.ToString());

[/code]

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