предыдущих рельсов 4 я имел в моделиRails 4, сделать атрибут труднодоступные
class User < ActiveRecord::Base
attr_accessible :name, :email, :password, :password_confirmation
...
end
Но теперь strong_parameters
заменил protected_attributes
так я комментирую его и использовать permit
.
Теперь я обнаружил, что могу получить доступ к атрибуту, не допуская его.
В rails c
мне удалось это сделать:
2.0.0p247 :002 > User.new(admin: "1")
=> #<User id: nil, name: nil, email: nil, created_at: nil, updated_at: nil, password_digest: nil, remember_token: nil, admin: true>
2.0.0p247 :016 > user = User.new(name: 'Nir', email: '[email protected]', password: 'foobar', password_confirmation: 'foobar', admin: "1")
=> #<User id: nil, name: "Nir", email: "[email protected]", created_at: nil, updated_at: nil, password_digest: "$2a$10$xVnY8ydd5SoaLVipK5j4Del40FrOmu4bKypGjBEwvms7...", remember_token: nil, admin: true>
Когда очевидно, что я не должен быть в состоянии установить и изменить атрибут администратора. Только user.toggle(:admin)
должен уметь.
Так что же я не понимаю или должен поступать правильно. А как сделать этот тест проход:
describe "accessible attributes" do
it "should not have allow access to admin" do
expect do
User.new(admin: "1")
end.to raise_error(ActiveModel::MassAssignmentSecurity::Error)
end
end
У меня есть и использовать 'разрешение' без' admin'. Должно быть, этого достаточно? Есть ли способ предотвратить прямое использование свойства? Если это так, мне нужно его использовать? – Nir
Этого достаточно, да. –