Rails 5, авторизация pundit - PullRequest
       10

Rails 5, авторизация pundit

0 голосов
/ 30 октября 2018

Pundit работает хорошо, если у действия есть такие ресурсы, как:

class Admin::PagesController << ApplicationController
  def index
    @pages = Page.all
  end
end

Как авторизовать метод без ресурсов в действии?

class Admin::DashboardController << ApplicationController
  def index
  end
end

У меня есть файл политики / admin / dashboard_policy.rb

class Admin::DashboardPolicy < ApplicationPolicy
  class Scope < Scope
    def resolve
      scope.all
    end
  end
end

Этот файл был сгенерирован командой:

rails g pundit:policy Admin/Dashboard

Файл views / admin / index.html.slim содержит только статический текст. Ничего больше.

Как авторизовать действие без каких-либо ресурсов?

С уважением Sssebaaa

Ответы [ 2 ]

0 голосов
/ 30 октября 2018

Чтобы авторизоваться без экземпляра области или экземпляра модели, вызовите авторизацию с символом или массивом символов (при наличии пространства имен):

class Admin::DashboardController << ApplicationController
  def index
    authorize [:admin, :dashboard]
  end
end

Это вызовет метод #index? для класса политики:

class Admin::DashboardPolicy < ApplicationPolicy
  def index?
    user.admin?
  end
end

Вы также можете полностью удалить область из своей политики.

0 голосов
/ 30 октября 2018

Если у вас нет каких-либо обратных вызовов, проверяющих, что политика ограничена, как рекомендует документ pundit, например

class ApplictationController < ActionController::Base
  include Pundit
  after_action :verify_policy_scoped, only: :index
end

Тебе нечего делать.

Однако, если у вас есть обратный вызов, вы можете просто пропустить его в своем действии контроллера следующим образом:

class Admin::DashboardController << ApplicationController
  skip_after_action :verify_policy_scoped, only: [:index]

  def index 
  end
end
...