Я внедряю pundit и хочу ограничить действия user#edit и user#update только текущим_пользователем.
def edit
@user = current_user
authorize(@user)
end
def update
@user = current_user
authorise(@user)
if @user.update_attributes(user_params)
flash[:success] = "Profile updated"
redirect_to edit_user_path
else
render 'edit'
end
end
Ниже приводится моя попытка политики, которая (а) не работает и (б) нелогична.
class UserPolicy
attr_reader :user, :user
def initialise(user, user)
@user = user
end
def update?
true
end
alias_method :edit?, :update?
end
Теперь я обновил свою UserPolicy, как показано ниже. Я установил действия на false для тестирования, так как все было разрешено:
class UserPolicy < ApplicationPolicy
def new?
create?
end
def create?
false
end
def edit?
update?
end
def update?
false
#user.id == record.id
end
end
Однако моя политика не признается. После дальнейшего чтения я добавил следующее в свой ApplicationController:
after_filter :verify_authorized, except: :index
after_filter :verify_policy_scoped, only: :index
Когда я теперь перехожу к моему действию user#edit, я получаю:
Pundit::AuthorizationNotPerformedError