Я использую CanCanCan
для авторизации.Администратор может управлять всем, поэтому у них нет правил для каждого пользователя.В результате они не могут создавать элементы для себя по умолчанию.Похоже, мне нужно добавить кучу дополнительных сантехник, чтобы create
в моих контроллерах работал так же для администраторов, как и для обычных пользователей.Причина в том, что Ability#attributes_for
не предоставляет администратору пользователя атрибут user_id.
Как другие люди обходят это?Вы пишете код для конкретной обработки сценариев использования администратора в вашем представлении или контроллере?
Соответствующие части класса Способности
if user.admin?
can manage, :all
else
can manage, Purchase, user_id: user.id
end
Пример взаимодействия
2.6.2 :012 > Ability.new(User.find(3)).attributes_for(:create, Purchase)
=> {:user_id=>3}
2.6.2 :013 > Ability.new(User.find(4)).attributes_for(:create, Purchase)
=> {}
Пользователь 3 - general_user, Пользователь 4 - администратор
Вконтроллер
# relying on load_and_authorize_resource
def create
puts @purchase.user_id # => nil for admin, 3 for general user
# have to add this for admin use case
@purchase.user = current_user
...
end