2010-11-09 4 views
1

Я пытаюсь управлять правами доступа пользователей следующим образом:ручки массивы/хэши из текстовых столбцов таблицы

В моей базе данных я создал таблицу с колонкой под названием «permission_posts». Данные в «permission_posts» представляет собой текст и пример его содержания следующим образом:

write = false 
read = true 
... 

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

Будучи новым для RoR, я отправился на поиски в Интернете, и я нашел то, что, возможно, не понадобилось для достижения моей цели: сериализовать данные и преобразовать строку в массив, а затем выполнить поиск в ней. Для обоих этих альтернатив (если они действительны) я не знаю, как действовать.

P.S .: безопасный метод управления разрешениями пользователей? есть ли лучший способ сделать то, что я хочу?

ответ

0

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

(user_id, action, is_permitted) 

или, даже,

(user_id, action_id, is_permitted) 

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

(user_id, action1_permitted, action2_permitted ...) 
+0

Думаю, я собираюсь использовать третий вариант, который вы мне предложили: (user_id, action1_permitted, action2_permitted ...). Единственное сомнение в том, что у меня может быть таблица со многими столбцами, каждая для каждого действия, связанного с каждым объектом! Вот почему я хотел обработать действия, описанные в первоначальном Вопросе. – user502052

0

Я действительно не знаю, если это хороший способ, но я думаю, что это стоит здесь для справки.

Я бы сохранил разрешение как целое, а не строку. Значение зависит от значений записи и чтения. Таким образом, запись является первой бит и считывание второго бита (представленного в целом в двоичном виде, потому что они являются истинными и ложными только)

Так

write = false, read = false => 00 => 0 
write = true, read = false => 01 => 1 (although this one seems strange :D) 
write = false, read = true => 10 => 2 
write = true, read = true => 11 => 3 

Так что, если вы хотите найти пользователь которые имеют разрешение на чтение, но не имеют права на запись, вы просто выполняете поиск по значению 2.

0

Есть ли причина, по которой вы не используете миграции? Обычной процедурой Rails было бы создание модели:

script/generate model Permission user_id:integer action:string is_permitted:boolean 

затем выполнить миграцию базы данных для создания таблицы. Затем сопоставьте таблицу с пользователем (User has_many Permissions).

0

я бы взял другой подход и использовать то, что уже есть, основываясь на том, что мне нужно:

Другое предприятие oach, если вы хотите, чтобы одно-много пользователей разрешалось использовать битовую маску. Here пример с ролями, которые могут быть адаптированы к вашим потребностям.

Смежные вопросы