Я перечитывал вопросы безопасности рельсов, и меня больше всего беспокоит массовое назначение. Мое приложение использует attr_accessible, однако я не уверен, что знаю, как лучше всего обрабатывать открытые отношения. Давайте предположим, что у нас есть базовый сайт создания / владения контентом. Пользователь может создавать сообщения в блоге и иметь одну категорию, связанную с этим сообщением.
Итак, у меня есть три модели:
- Пользователь
- post: принадлежит пользователю и категории
- категория: принадлежит пользователю
Я разрешаю массовое назначение для category_id, чтобы пользователь мог обнулить его, изменить его на одну из своих категорий или с помощью массового назначения, я полагаю, они могли бы изменить его на чужую категорию. Вот где я немного не уверен насчет того, как лучше поступить.
Ресурсы, которые я исследовал (в частности, railscast # 178 и resource , который был предоставлен этим Railscast), оба упоминают, что ассоциация не должна быть назначаемой по массе, что делает смысл. Я просто не уверен, как еще разрешить пользователю изменять то, что категория из записи было бы грубым способом.
Есть идеи, как лучше всего это решить? Я смотрю на это неправильно?
ОБНОВЛЕНИЕ : Надеюсь, я проясню кое-что еще.
Допустим, я в Post, мне нужно что-то вроде следующего:
def create
@post = Post.new(params[:category])
@post.user_id = current_user.id
# CHECK HERE IF REQUESTED CATEGORY_ID IS OWNED BY USER
# continue on as normal here
end
Это похоже на большую работу? Мне нужно было бы проверить это на каждом контроллере как в обновлении, так и в создании действия. Имейте в виду, что существует не только одно отношение "принадлежат_".