Разрешения Bitmask — расширение/отзыв разрешений

У меня есть битовая маска разрешений + набор ролей:

{
    EDIT: '1',
    DELETE: '2',
    ADD: '4',
    VIEW: '8',

}

Я ищу самый простой способ расширения и отзыва разрешений пользователя с помощью побитовых операций.

Например, пользователь имеет 7 разрешений, позволяющих ему EDIT, DELETE и ADD

Я хочу добавить VIEW и ADD или 12.

Какая самая простая формула для увеличения 7 с 12 до 15 и наоборот?

Как я могу отозвать существующие разрешения пользователя 12 (VIEW, ADD), чтобы отозвать (DELETE, ADD) - 6, чтобы оно было равно 8 ?


person Maruf    schedule 05.09.2014    source источник
comment
Расширить: 7 побитово или 12 = 15; Отзыв: 12 побитовых и побитовых не (6) = 9   -  person aSteve    schedule 06.09.2014


Ответы (1)


Хорошо, я понял, что для расширения вы должны использовать оператор Bitwise OR (|), например

// Extend Permissions
var userPermissions = 7;
var addPermissions  = 12;
var newPermissions  = userPermissions | addPermissions // 7 | 12 = 15

и чтобы отозвать, вы должны использовать Bitwise AND (&) и вычесть его из разрешений пользователей, например:

// Revoke Permissions
var userPermissions    = 12;
var revokePermissions  = 6;
var newPermissions     = userPermissions - (userPermissions & revokePermissions) // 12 - (12 & 6) = 8
person Maruf    schedule 05.09.2014