最近實作了一個列舉的 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;

王圓外 發表在 痞客邦 PIXNET 留言(0) 人氣()