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
文件视图/admin/index.html.slim只有静态文本。没什么了。
如何在没有任何资源的情况下授权行动?
问候Sssebaaa
要在没有作用域或模型实例的情况下进行授权,请调用authorize with a symbol或array of symbol(当使用名称空间时(:
class Admin::DashboardController << ApplicationController
def index
authorize [:admin, :dashboard]
end
end
这将调用策略类上的#index?
方法:
class Admin::DashboardPolicy < ApplicationPolicy
def index?
user.admin?
end
end
您也可以从策略中完全删除作用域。
如果你没有任何回调来检查策略的范围,就像专家文档建议的那样,比如
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