Pundit AuthorizationNotPerformedError / PolicyScopingNotPerformedError - PullRequest
0 голосов
/ 04 мая 2018

Я новичок с драгоценным камнем Pundit и застрял на чем-то.

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

Что я делаю не так?

Контроллер:

def planning
  @plans = Order.all
  authorize @plans
end

политика:

def planning?
  user.present?
end

Planning.html.haml

%h1 test

Когда я добавлю это: after_action :verify_policy_scoped, :only => planning, if: verify_policy_scoped?

Я получаю сообщение PolicyScopingNotPerformedError.

1 Ответ

0 голосов
/ 04 мая 2018

С ЧИТАТЬ :

Pundit отслеживает, вызвали ли вы authorize в любом месте действия вашего контроллера. Pundit также добавляет метод к вашим контроллерам под названием verify_authorized

...

Pundit также добавляет verify_policy_scoped к вашему контроллеру. Это вызовет исключение, подобное verify_authorized. Однако он отслеживает, используется ли policy_scope вместо authorize.

Вы смешали два метода. Вы позвонили authorize, но проверяете, был ли вызван policy_scope.

policy_scope обычно используется для коллекций записей (например, вашего примера или более типично index действий), тогда как authorize обычно используется для отдельных записей (например, show / edit / update / destroy действий).

В вашем случае, однако, то, что у вас есть в данный момент, вовсе не обязательно требует политики - все, что вы проверяете, это то, вошел ли пользователь в систему!

Если требуется, чтобы пользователь вошел в систему, но это не так, тогда ваше приложение должно ответить с ошибкой 401, а не 403. Вы можете сделать это, например, с before_action :authorize в вашем контроллере. (Зависит от того, как вы реализовали авторизацию - смотрите документацию по используемой вами библиотеке, например, devise).

...