Обработка массивов / хэшей из текстовых столбцов таблицы - PullRequest
1 голос
/ 09 ноября 2010

Я пытаюсь управлять разрешениями пользователя следующим образом:

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

write = false
read = true
...

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

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

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

Ответы [ 4 ]

0 голосов
/ 09 ноября 2010

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

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

0 голосов
/ 09 ноября 2010

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

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

Итак

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 голосов
/ 09 ноября 2010

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

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

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

0 голосов
/ 09 ноября 2010

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

(user_id, action, is_permitted)

или даже

(user_id, action_id, is_permitted)

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

(user_id, action1_permitted, action2_permitted ...)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...