Boolean столбец таблицы, который пользователь может изменить только на 'false'

Интересно, возможно ли это, или мне нужно моделировать его по-другому. У меня есть один столбец таблицы, который может иметь значения "true" или "false". У меня есть два типа пользователей, обычный пользователь и редактор. Это базовая модель Post:

create_table "post", force: true do |t| t.boolean "post_visible", default: false
end

Обычный пользователь может создать сообщение, но сообщение не видно сразу на сайте. Редактору необходимо установить логический столбец post_visible на "true". После того, как сообщение видно, обычный пользователь может изменить post_visible обратно на false. Как я могу сделать, чтобы разрешить редактору устанавливать столбец post_visible в true и false а обычный пользователь - только false.

редактор

  • может изменить столбец post_visible на true и false

Обычный пользователь

  • может изменить столбец post_visible только на false

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

Любые предложения, как это сделать? :)

3 ответа

Я думаю, вам следует использовать два поля вместо одного: is_reviewed и is_visible. Редактор может редактировать оба поля, и обычный пользователь может изменить is_visible только. Сообщение публикуется, если оно просматривается и видимо. Если вы идете по этому пути, убедитесь, что обычный пользователь не может массово назначить is_reviewed.


в файле модели

before_validation :make_false_if_regular
private
def make_false_if_regular if user.type == "regular" post.post_visible = nil end
end


да, ты делаешь добро. Теперь вы ограничиваете доступ к пользователям. Для этого вам потребуется какая-то авторизация, чтобы вы могли проверить, что запрос является законным или нет. Самый известный способ - использовать cancan gem (https://github.com/ryanb/cancan), вы также можете создать свою собственную систему авторизации.

licensed under cc by-sa 3.0 with attribution.