Несколько типов полномочий (роли), сохраненные в базе данных как единственное десятичное число

В Netbeans может оказаться полезным создать максимальный размер кучи. Перейдите к Выполнить => Установить конфигурацию проекта => Настроить . В появившемся окне Run перейдите к опции VM Option , заполните -Xms2048m -Xmx2048m. Это может решить проблему размера кучи.

8
задан niton 18 April 2015 в 19:51
поделиться

2 ответа

Вы используете битовые операции. Псевдокод был бы чем-то как:

bool HasPermission(User user, Permission permission) {
    return (user.Permission & permission) != 0;
}

void SetPermission(User user, Permission permission) {
    user.Permission |= permission;
}

void ClearPermission(User user, Permission permission) {
    user.Permission &= ~permission;
}

Разрешение является перечислимым типом, определенным в Вашем сообщении, хотя безотносительно типа это - потребности быть основанным на подобном целому числу типе. То же относится к Пользователю. Поле Permission.

Если те операторы (и, | =, и &=) не имеют смысла Вам, то считанный на битовых операциях (поразрядно И и битовое "ИЛИ").

4
ответ дан 5 December 2019 в 21:24
поделиться

На самом деле это - то, как мы определяем полномочия в рамках довольно большого веб-приложения, для которого я являюсь DBA.

Если Вы соберетесь сделать что-то вроде этого, то Вы действительно извлечете выгоду из наличия таблицы чисел. Это сделает Ваши вычисления намного быстрее.

Основная установка включает следующие таблицы:

  1. Группы - для того, чтобы сделать многих многим пользователям и точкам безопасности
  2. Точки безопасности - которые содержат значение для анонимной авторизации и один для аутентифицируемых пользователей, которые не являются частью отдельной группы
  3. Объединяющая таблица точки безопасности группы
  4. Специальная таблица цифр BitMask, которая содержит записи для значений ^2. Таким образом существует одна запись для 2 (2) и двух записей для три (2 и 1). Это мешает нам иметь для вычисления значений каждый раз.

Сначала мы определяем, зарегистрирован ли пользователь. Если они не, мы возвращаем анонимную авторизацию для точки безопасности.

Затем мы определяем, является ли пользователь членом каких-либо групп, связанных с точкой безопасности через простое EXISTS использование a JOIN. Если они не, мы возвращаем значение, связанное с аутентифицируемым пользователем. Большинство анонимных и аутентифицируемых значений по умолчанию установлено на 1 в нашей системе, потому что мы требуем, чтобы Вы принадлежали определенным группам.

Примечание: Если анонимный пользователь не получает доступ, интерфейс бросает их к журналу в поле, чтобы позволить им войти в систему и попробовать еще раз.

Если пользователь является членом одной или нескольких групп, то мы выбираем отличные значения из таблицы BitMask для каждого из значений, определенных для групп. Например, если бы Вы принадлежали трем группам и имели один уровень авторизации 8, один с 12 и последнее с 36, то наш выбор против таблицы Bit Mask возвратился бы 8, 8 и 4, и 4 и 32 соответственно. Путем выполнения отличного мы получаем номер 4, 8 и 32 который правильно битовые маски к 101 100.

То значение возвращено как пользовательский уровень авторизации и обработано веб-сайтом.

Иметь смысл?

3
ответ дан 5 December 2019 в 21:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: