#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.