Rails5、权威授权
Rails 5, pundit authorization
Pundit 运作良好,如果操作具有以下资源:
class Admin::PagesController << ApplicationController
def index
@pages = Page.all
end
end
如何在没有任何资源的情况下授权方法?
class Admin::DashboardController << ApplicationController
def index
end
end
我有文件 policies/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
如果您没有任何回调来检查政策是否在范围内,正如专家文档所建议的那样,例如
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
要在没有范围或模型实例的情况下进行授权,请使用符号或符号数组(命名空间时)调用授权:
class Admin::DashboardController << ApplicationController
def index
authorize [:admin, :dashboard]
end
end
这将在策略 class:
上调用 #index?
方法
class Admin::DashboardPolicy < ApplicationPolicy
def index?
user.admin?
end
end
您也可以从策略中完全删除范围。
Pundit 运作良好,如果操作具有以下资源:
class Admin::PagesController << ApplicationController
def index
@pages = Page.all
end
end
如何在没有任何资源的情况下授权方法?
class Admin::DashboardController << ApplicationController
def index
end
end
我有文件 policies/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
如果您没有任何回调来检查政策是否在范围内,正如专家文档所建议的那样,例如
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
要在没有范围或模型实例的情况下进行授权,请使用符号或符号数组(命名空间时)调用授权:
class Admin::DashboardController << ApplicationController
def index
authorize [:admin, :dashboard]
end
end
这将在策略 class:
上调用#index?
方法
class Admin::DashboardPolicy < ApplicationPolicy
def index?
user.admin?
end
end
您也可以从策略中完全删除范围。