Как я могу установить 'attr_accessible', чтобы НЕ разрешать доступ к ЛЮБОМУ из полей ДЛЯ модели, использующей Ruby on Rails? - PullRequest
16 голосов
/ 29 января 2011

Если в файле модели у меня есть только этот код:

class Users < ActiveRecord::Base
end

что это значит?Все атрибуты, связанные с моделью, доступны или нет?

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

Ответы [ 4 ]

34 голосов
/ 29 января 2011

Просто установите:

class Users < ActiveRecord::Base
  attr_accessible #none
end

Как сказал Пан Томакос (attr_accessible - массив параметров, которые могут быть массовыми. Поэтому, если вы отправляете без символов, никакие параметры не будут доступны.

Этот билет был полезен

10 голосов
/ 29 января 2011

По умолчанию все атрибуты являются attr_accessible (что означает, что они могут быть установлены для моего массового назначения).

  • attr_accessible - только этот список атрибутов может быть установлен массовым назначением (white-list)).
  • attr_protected - эти атрибуты не могут быть установлены массовым присваиванием (черный список).
  • attr_readonly - эти атрибуты нельзя устанавливать, кроме случаев, когда создается запись.

Чтобы полностью отключить массовое назначение, используйте что-то вроде этого:

ActiveRecord::Base.send(:attr_accessible, nil)

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

1 голос
/ 13 декабря 2011

Начиная с Rails 3.1, доступен следующий параметр конфигурации, чтобы отключить массовое назначение по умолчанию для всех моделей, пока вы явно не вызовете attr_accessible или attr_protected:

config.active_record.whitelist_attributes = true

См. http://edgeguides.rubyonrails.org/security.html#mass-assignment и https://github.com/rails/rails/commit/f3b9d3aba8cc0ffaca2da1c73c4ba96de2066760

0 голосов
/ 15 мая 2018

Я предпочитаю быть более явным в отказе для одной модели:

class Users < ActiveRecord::Base
  attr_accessible nil
end

Результат такой же, как attr_accessible без параметров, но делает ваше намерение более ясным. Это уменьшит вероятность того, что будущий программист (например, вы сами!) Удалит строку ... или начнет добавлять поля в attr_accessible.

Это успокаивает Тормоза и другие инструменты для обнаружения уязвимостей.

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