C# Enum 简易权限设计 使用FlagsAttribute属性
2013-11-12 15:46
405 查看
基本權限設計:
[code]///權限列舉
[/code]
技巧一:利用2的次方值,來作為列舉值以便日後做位元運算(&AND、|OR、^XOR)。
技巧二:現有權限中,加入新權限動作。(OR運算)
[code]permission=permission|Permissions.Create;
[/code]
技巧三:加入【FlagsAttribute】標籤
[code]permission=permission|Permissions.Create;
[/code]
技巧四:現有權限中,移除某個權限動作。(XOR與AND運算應用)
[code]permission=permission|Permissions.Create;
[/code]
技巧五:判斷現在權限中,是否擁有某個權限(AND運算)
[code]permission=permission|Permissions.Create;
[/code]
簡易權限類別設計:
[code]///我的權限
[/code]
簡易權限類別使用:
[code]
[/code]
from:http://www.dotblogs.com.tw/chhuang/archive/2008/04/26/3514.aspx
///<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]
技巧三:加入【
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: