Где и как назначить пользователю роль администратора для attr работает в Rails 3.1?

в направляющих направляющих в http://edgeguides.rubyonrails.org/security.html, раздел 6.1, он вводит роль для attr_accessible с: as option,

attr_accessible :name, :is_admin, :as => :admin

мой вопрос: если пользователь входит в систему, где и как я могу назначить пользователю :роль администратора, чтобы он/она получил право на массовое назначение с помощью attr_accessible? Также я могу определить свою собственную роль, такую как group_to_update? Если да, то что должно входить в определение group_to_update?

спасибо.

3 ответов


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

где и как я могу назначить пользователя: роль администратора

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

могу ли я определить свою собственную роль, такую как group_to_update

роли на самом деле не "определены" в каком-либо формальном смысле вообще. В любом месте, где ожидается роль, просто используйте любой символ / строку (например,:group_to_update), как роль. Нет необходимости указывать его где-либо еще впереди время.

вот как это работает. Обычно при массовом назначении хэша атрибутам модели все атрибуты модели используются в качестве ключей к назначенному хэшу. Итак, если у вас есть Barn модель barn экземпляр его, с тремя атрибутами horse, cat и rabbit, тогда так:

barn.attributes = params

по существу то же самое, что делать:

barn.horse = params[:horse]
barn.cat = params[:cat]
barn.rabbit = params[:rabbit]

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

class Barn < ActiveRecord::Base
    attr_accessible :cat
    attr_accessible :rabbit
end

тогда так:

barn.attributes = params

будет делать только это:

barn.cat = params[:cat]
barn.rabbit = params[:rabbit]

потому что только "кошка" и "кролик" установлены в доступные ("лошадь" нет). Теперь рассмотрим установку роли атрибута следующим образом:

class Barn < ActiveRecord::Base
    attr_accessible :cat
    attr_accessible :rabbit, :as => :banana
end

во-первых, обратите внимание, что роль может по что угодно пока это символ/строку. В этом случае я сделал роль :banana. Теперь, когда вы устанавливаете роль на attr_accessible атрибут, он обычно не назначается. Это:

barn.attributes = params

теперь будет делать только это:

barn.cat = params[:cat]

но вы можете назначить атрибуты использование определенной роли С помощью assign_attributes метод. Так что вы можете сделать:

barn.assign_attributes(params, :as => :banana)

это назначит все нормально защищенные параметры, а также все параметры, защищенные ролью :banana:

barn.cat = params[:cat]
barn.rabbit = params[:rabbit]

поэтому рассмотрим более длинный пример с более атрибуты:

class Barn < ActiveRecord::Base
    attr_accessible :cat
    attr_accessible :rabbit, :as => :banana
    attr_accessible :horse, :as => :banana
    attr_accessible :cow, :as => :happiness
end

затем вы можете использовать эти роли при назначении атрибутами. Это:

barn.assign_attributes(params, :as => :banana)

отвечает:

barn.cat = params[:cat]
barn.rabbit = params[:rabbit]
barn.horse = params[:horse]

и так:

barn.assign_attributes(params, :as => :happiness)

отвечает:

barn.cat = params[:cat]
barn.cow = params[:cow]

теперь если вы решили, вы можете сделать роли пользователей (например, столбец "роль" в вашей модели пользователя) соответствующими ролям атрибутов в любой модели. Таким образом, вы можете сделать что-то вроде этого:

barn.assign_attributes(params, :as => user.role)

если этот userроль бывает banana, затем (используя наш последний пример модели) он установит атрибуты на сарае для кошки, кролика и лошади. Но это лишь один из способов использования атрибутивных ролей. Это полностью зависит от вас, если вы хотите использовать их иным способом.


Это для защиты от массового назначения, как объясняет ваша ссылка.

в rails (для обновления) это влияет только на update_attributes звонок. Вы все еще можете использовать update_attribute или admin= методы назначения переменной admin.

User.first.update_attributes(:name => "Gazler", :admin => true) #this will not work
User.first.update_attribute(:admin, true) #This will work

#This will also work
user = User.first
user.admin = true
user.save

возможно, вы захотите взглянуть на использование драгоценный камень для ваших разрешений. Канкан вероятно, самый распространенный.


посмотреть assign_attributes метод.

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