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
答案 0 :(得分:0)
如专家文档所建议的那样,如果没有任何回调检查策略的作用域,如
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
答案 1 :(得分:0)
要在没有作用域或模型实例的情况下进行授权,请使用符号或符号数组(在命名空间中)进行授权:
class Admin::DashboardController << ApplicationController
def index
authorize [:admin, :dashboard]
end
end
这将在策略类上调用#index?
方法:
class Admin::DashboardPolicy < ApplicationPolicy
def index?
user.admin?
end
end
您还可以从策略中完全删除范围。