Курсовые - Разработка приложения управления организацией

Система контроля доступа с использованием битовой маски

Для проверки прав доступа к определенным методам в приложении управления организацией используются побитовые операторы. Побитовые операторы интерпретируют операнды как последовательность из 32 битов (нулей и единиц). Они производят операции, используя двоичное представление числа, и возвращают новую последовательность из 32 бит (число) в качестве результата. Примеры представления чисел в двоичной системе:

  • mask = 0;    // 00000000000000000000000000000000
  • mask = 1;    // 00000000000000000000000000000001
  • mask = 2;    // 00000000000000000000000000000010
  • mask = 3;    // 00000000000000000000000000000011
  • mask = 255;// 00000000000000000000000011111111

Побитовые операторы работают следующим образом:

  1. Операнды преобразуются в 32-битные целые числа, представленные последовательностью битов. Дробная часть, если она есть, отбрасывается.
  2. Для бинарных операторов – каждый бит в первом операнде рассматривается вместе с соответствующим битом второго операнда: первый бит с первым, второй со вторым и т.п. Оператор применяется к каждой паре бит, давая соответствующий бит результата.
  3. Получившаяся в результате последовательность бит интерпретируется как обычное число.

Каждой роли соответствует ряд доступов в приложении управления организации и на самом сервере. Например, сотрудник Полиции может лишь просматривать роли и участников, а Глава Полиции – ещё и редактировать их, и тому подобное.

В итоге доступы хранятся в 10-ной системе, а для их проверки используется двоичная. Такая интерпретация доступов позволяет «упаковать» много информации в одно число. Это экономит память, а кроме этого – это удобно, поскольку в дополнение к экономии – по такому значению очень легко проверить, имеет ли персонаж заданную комбинацию доступов.

 

У каждого класса участника организации есть метод getMaskOrder, который возвращает константу с названиями методов, к которым можно изменить доступ, и их описания для клиента. С помощью этого метода, при запуске сервере создается 10-ное значение для каждого метода, который вернул getMaskOrder, в методе createMaskOrderValues.

Также при старте сервера из базы данных загружается значение маски каждой роли и присваивается каждому участнику. Если у участника несколько ролей, то его маска будет складываться из всех масок его ролей. Если в приложении изменяются права доступа для роли (рис.21), то на сервере вызывается метод refreshMask, для того чтобы обновить маску у всех персонажей, у которых эта роль имеется.

Рисунок 21 – Изменение прав доступа для роли Глава полиции

 

При вызове метода, который имеет проверку на права доступа, вызывается метод checkAccess, который проверяет доступ персонажа к данному методу с помощью побитовой операции &. checkAccess возвращает true/false значение и выполняет метод, при значении true или выдает ошибку прав доступа (рис.22) при значении false.

Рисунок 22– Уведомление об отсутствии прав на покупку т/с

 

Битовой маской называют как раз комбинацию двоичных значений, которая используется для проверки и выборки единиц на нужных позициях. Маски могут быть весьма удобны. В частности, их используют в методах, чтобы одним параметром передать несколько «флагов», т.е. однобитных значений.

Применение масок налагает определённые ограничения. В частности, побитовые операторы в JavaScript работают только с 32-битными числами, а значит, к примеру, 33 доступа уже в число не упакуешь. Да и работа с двоичной системой счисления – как ни крути, менее удобна, чем с десятичной или с обычными логическими значениями true/false.

Поэтому основная сфера применения масок – это быстрые вычисления, экономия памяти.

Количество комментариев: 0

Для того, чтобы оставить коментарий необходимо зарегистрироваться