Они используют enum
как битовую карту: если установлен определенный бит, значит, у вас есть эта привилегия. Они также используют оператор левого смещения. Позвольте мне попытаться продемонстрировать все это сразу:
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
Таким образом, вы можете комбинировать две роли. Например, некоторые пользователи могут одновременно играть Employee
и Supervisor
, просто установив соответствующие биты.
А как проверить, установлен ли бит? Это именно то, что (Roles & role) != role)
делает. Например:
WebRoles user = WebRoles.Employee | WebRoles.Supervisor;
bool isEmployee = (user & WebRoles.Employee) == WebRoles.Employee; // true
Если вы тестируете пользовательскую переменную, чтобы проверить, установлен ли этот бит Employee
, этот оператор &
вернет все совпадающие биты.
Надеюсь, эта помощь; не стесняйтесь редактировать этот ответ