Подтвердить что ты не робот

Rails attr_accessible: object vs: object_id

A User has_one Account. При настройке attr_accessible в модели пользователя лучше защитить :account, :account_id или оба?

attr_accessible :account

или

attr_accessible :account_id

или

attr_accessible :account, :account_id

Я чувствую, что оба - это путь (насколько это безопаснее), хотя он чувствует себя менее сухим.

Обновить, чтобы получить больше фона

Просто чтобы дать немного больше информации о том, почему я спрашиваю. Я, как и большинство ppl, видел, что случилось с Github, поэтому мы проходим через наше приложение и немного запираем его.

В процессе этого я нашел тесты, в которых мы передаем счет

User.create account: account

и где мы перешли в account_id:

User.create account_id: account.id

Мои параметры заключались в том, чтобы либо изменить их все на константу, либо изменить attr_accessible, чтобы разрешить это. Я решил изменить их все, чтобы быть последовательным. Но меня беспокоило, что мы, возможно, использовали оба метода в нашем приложении, и я мог бы разорвать наше приложение, разрешив только одно или другое.

Я пропустил, когда сказал, что использование обоих более безопасно. Это был долгий день.

4b9b3361

Ответ 1

Нет правильного ответа для этого, хотя это зависит от того, как вы собираетесь обновлять этого пользователя. attr_accessible :account позволит вам массово назначить учетную запись следующим образом:

user.update_attributes(:account => account)

Полезно, если у вас уже есть объект учетной записи, который вы хотите связать с пользователем, а также множество других атрибутов. С другой стороны, attr_accessible :account_id было бы более подходящим, если бы вы назначали идентификатор учетной записи, как из выпадающего меню или какого-либо другого элемента формы:

user.update_attributes(params[:user]) # params[:user][:account_id] is a part of this hash

Этот последний случай, как правило, считается более опасным и был частью проблемы с недавней проблемой безопасности Github: вы можете публиковать любую учетную запись, которая вам нравится, включая учетную запись, которая не принадлежит вам, и ваш пользователь будет назначен он.

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

Ответ 2

Не хотите ли вы установить attr_accessible :user или attr_accessible :user_id в свой аккаунт .rb, считая, что учетная запись belongs_to :user.

Кроме того, attr_accessible - это явный белый список. Я не вижу, как attr_accessible :user, :user_id будет более безопасным, чем attr_accessible :user.