Элегантные схемы веб-разрешений

В настоящее время я пишу веб-приложение, которое имеет около 6-12 страниц. Я хочу, чтобы на каждой из этих страниц пользователь мог выполнять некоторые (или все) следующие действия: просмотр, добавление, обновление и удаление.

Текущая схема разрешений, о которой я думал, имеет целое число в базе данных. Это целое число будет соответствовать двоичному числу (например: 26 -> 11010). Полученное двоичное число действует как «переключатель» и определяет, какие разрешения есть у пользователя. Определение того, какой бит представляет, какое разрешение хранится в другой таблице.

Моя проблема в том, что если на каждой странице есть 4 варианта (просмотр, добавление, редактирование, удаление), то этот способ определения разрешений может выйти из-под контроля.

Есть ли у кого-нибудь другие идеи для схемы разрешений, которая была бы такой же гибкой (в отношении конфигурируемости), как эта, но не такой подавляющей (в отношении целочисленных ограничений)?


person Onion-Knight    schedule 04.11.2009    source источник


Ответы (2)


Возможно, лучший ответ, если вам действительно нужно пойти по этому пути, — это иметь в базе данных строку для каждой страницы/для каждого пользователя с набором разрешений, чтобы ваша таблица выглядела так:

 page        user     create read update delete 
 =====       =====    ====== ==== ====== ======
 test.html   joe      y      y    y      n 
 test2.html  joe      n      y    y      n 

В качестве альтернативы, как это обычно бывает, вам лучше иметь роли, такие как автор, редактор, рецензент, администратор, и давать своим ролям детализированные разрешения и помещать пользователей в роли.

person Chris K    schedule 04.11.2009

Я бы посоветовал вам не прибегать к битам. Используйте отдельные столбцы в базе данных для каждой категории разрешений и используйте целые числа 1 и 0, чтобы указать, предоставлено ли это разрешение или нет. Это убережет вас от битовых манипуляций и будет быстрым. Единственным недостатком будет большее количество столбцов, что, по вашему описанию, не представляет большой проблемы.

person KJ Saxena    schedule 04.11.2009
comment
Это может показаться, что вы проделываете большую работу, демонстрируя свои технические возможности, используя побитовое представление для ваших разрешений, и если это ваша цель, то действуйте, но через шесть месяцев, когда вам придется вернуться и вернуться к этому коду, чтобы исправить возникшую проблему, вы пожалеете, что не выбрали очевидное и легко поддерживаемое решение. - person glenatron; 04.11.2009