Rails 5,专家授权



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

最新更新