Rails CanCan: пользователь должен иметь возможность удалять собственную фотографию, но не может

#ruby-on-rails #ruby-on-rails-3 #authorization #cancan

#ruby-on-rails #ruby-on-rails-3 #авторизация #cancan

Вопрос:

Итак, я использую Rails 3 с CanCan для авторизации. Я хочу, чтобы все пользователи могли удалять созданные ими фотографии, и я думал, что у меня это настроено правильно, но это не работает…

Вот мой класс способностей:

 class Ability
  include CanCan::Ability

  def initialize(user)

    # ONLY REGISTERED USERS CAN DO THESE THINGS
    unless user.nil?

      # ALL REGISTERED USERS CAN DO THESE THINGS
      can :read, [Photo, Context, Focus, LandUse, Vote, Rating, Comment, Profile, Article]
      can :show, Page

      # MEMBERS
      if user.has_role? :member
        can [:create, :read], Photo
        can [:update, :destroy], Photo, :user_id => user.id
        can :create, [Vote, Rating, Comment, Profile]
        can :update, [Vote, Rating, Comment, Profile], :user_id => user.id

        can [:show, :update], User do |u|
          u == user
        end
      end

      # CURATORS
      ...

      # ADMINS
      ...

    end

    # ALL VISITORS CAN DO THESE THINGS
    can :create, [User, Profile]
    can :request_invite, User
    # can :show, Page

  end
end
  

Вот мое действие контроллера:

 def destroy
  @photo = Photo.find(params[:id])

  authorize! :delete, @photo
  @photo.destroy
  redirect_to :back, :notice => 'Photo deleted.'
end
  

Есть идеи, что здесь происходит не так?

Ответ №1:

Должно быть в authorize! :destroy, @photo действии вашего контроллера destroy .

Комментарии:

1. Похоже, вы получили ответ раньше моего… Я голосую за удаление моего ответа.

Ответ №2:

На самом деле, если вы используете load_and_authorize_resource в своем контроллере, вы можете не использовать

 @photo = Photo.find(params[:id])
authorize! :destroy, @photo
  

как это уже сделано CanCan.