C#: bitwise operator in enum (Custom Authorization in MVC)

后端 未结 2 1395
旧巷少年郎
旧巷少年郎 2020-12-29 14:27

I\'m currently reading an article , but I do not really understand how this work with the logical operator. Can anyone explain this to me?

eg. If I want to have 4 le

2条回答
  •  时光取名叫无心
    2020-12-29 14:47

    They're using an enum as a bit map: if a specific bit is set, so you have that privilege. They're also using a left shift operator. Let me try to demonstrate all that at once:

    Role         Decimal   Binary   Shifted   Decimal
    --------     -------   ------   -------   -------
    Customer   =    1    = 000001 = 000001  =    1
    Employee   =    1    = 000001 = 000010  =    2
    Supervisor =    1    = 000001 = 000100  =    4
    Admin      =    2    = 000010 = 010000  =   16
    

    This way you can combine two roles. For instance, some user can play Employee and Supervisor at same time, just having correspondent bits set.

    And how to check if a bit is set? It's exactly what that (Roles & role) != role) do. For example:

    WebRoles user = WebRoles.Employee | WebRoles.Supervisor;
    bool isEmployee = (user & WebRoles.Employee) == WebRoles.Employee; // true
    

    If you test user variable to check if that Employee bit is set, that & operator will return all match bits.

    Hope this help; feel free to edit this answer

提交回复
热议问题