最近實作了一個列舉的 Flag 來處理權限的機制,也在無意之間發現了 .NET 4.0 多了一個 HasFlag 這個 Function ,這倒是節省了很多寫 code 的程式與判斷。
如下的權限身分:
public enum SystemRoles
{
None = 0, // 0000 0000 0000 0000 0x0000
ReportUser = 1 << 0, // 0000 0000 0000 0001 0x0001
WebUser = 1 << 1, // 0000 0000 0000 0010 0x0002
ACCUser = 1 << 6, // 0000 0000 0100 0000 0x0040
HRUser = 1 << 7, // 0000 0000 1000 0000 0x0080
ReadyOnlyAdmin = 1 << 8, // 0000 0001 0000 0000 0x0100
ACCAdmin = 1 << 10, // 0000 0100 0000 0000 0x0400
HRAdmin = 1 << 11, // 0000 1000 0000 0000 0x0800
SystemAdmin = 1 << 14, // 0100 0000 0000 0000 0x4000
ITAdmin = 1 << 15, // 1000 0000 0000 0000 0x8000
}
如下面的情況,早期要得到 hasFlag1 的值,必須使用 hasFlag2 的方式,才能得到相同的結果,在程式的判讀上也比較吃力,現在使用 HasFlag() 的 Function 變得更簡單易懂了。
SystemRoles flagEnum = SystemRoles.WebUser | SystemRoles.HRUser | SystemRoles.ReportUser;
bool hasFlag1 = flagEnum.HasFlag(SystemRoles.WebUser);
bool hasFlag2 = ((flagEnum & SystemRoles.WebUser) != 0) ? true : false;