как защитить атрибуты от массового присвоения - PullRequest
0 голосов
/ 07 марта 2012

Привет, у меня есть вопрос NOOB в свете того, что произошло в GITHUB с использованием их приложения из-за дыры в безопасности в Rails.

Каков наилучший способ защитить атрибуты объектов в Rails, но при этом разрешить им присваивать значения, где это применимо?

Спасибо

1 Ответ

2 голосов
/ 07 марта 2012

На самом деле в Rails 3.1 добавлены новые встроенные способы обработки массовых назначений с ролями, на которые, вероятно, стоит взглянуть.

Примечания к выпуску здесь

В основном это работает так:

class User < ActiveRecord::Base
  attr_accessible :name
  attr_accessible :name, :role, :as => :admin
end

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

@user.update_attributes(params[:user])

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

@user.update_attributes(params[:user], :as => :admin)

И это также позволит обновлять атрибут :role

...