Для проверки прав доступа к определенным методам в приложении управления организацией используются побитовые операторы. Побитовые операторы интерпретируют операнды как последовательность из 32 битов (нулей и единиц). Они производят операции, используя двоичное представление числа, и возвращают новую последовательность из 32 бит (число) в качестве результата. Примеры представления чисел в двоичной системе:
Побитовые операторы работают следующим образом:
Каждой роли соответствует ряд доступов в приложении управления организации и на самом сервере. Например, сотрудник Полиции может лишь просматривать роли и участников, а Глава Полиции – ещё и редактировать их, и тому подобное.
В итоге доступы хранятся в 10-ной системе, а для их проверки используется двоичная. Такая интерпретация доступов позволяет «упаковать» много информации в одно число. Это экономит память, а кроме этого – это удобно, поскольку в дополнение к экономии – по такому значению очень легко проверить, имеет ли персонаж заданную комбинацию доступов.
У каждого класса участника организации есть метод getMaskOrder, который возвращает константу с названиями методов, к которым можно изменить доступ, и их описания для клиента. С помощью этого метода, при запуске сервере создается 10-ное значение для каждого метода, который вернул getMaskOrder, в методе createMaskOrderValues.
Также при старте сервера из базы данных загружается значение маски каждой роли и присваивается каждому участнику. Если у участника несколько ролей, то его маска будет складываться из всех масок его ролей. Если в приложении изменяются права доступа для роли (рис.21), то на сервере вызывается метод refreshMask, для того чтобы обновить маску у всех персонажей, у которых эта роль имеется.
Рисунок 21 – Изменение прав доступа для роли Глава полиции
При вызове метода, который имеет проверку на права доступа, вызывается метод checkAccess, который проверяет доступ персонажа к данному методу с помощью побитовой операции &. checkAccess возвращает true/false значение и выполняет метод, при значении true или выдает ошибку прав доступа (рис.22) при значении false.
Рисунок 22– Уведомление об отсутствии прав на покупку т/с
Битовой маской называют как раз комбинацию двоичных значений, которая используется для проверки и выборки единиц на нужных позициях. Маски могут быть весьма удобны. В частности, их используют в методах, чтобы одним параметром передать несколько «флагов», т.е. однобитных значений.
Применение масок налагает определённые ограничения. В частности, побитовые операторы в JavaScript работают только с 32-битными числами, а значит, к примеру, 33 доступа уже в число не упакуешь. Да и работа с двоичной системой счисления – как ни крути, менее удобна, чем с десятичной или с обычными логическими значениями true/false.
Поэтому основная сфера применения масок – это быстрые вычисления, экономия памяти.
Дата | Выполнено, % |
---|---|
2020-06-12 11:05:37 | 10 |
2020-06-12 02:11:23 | 100 |