【问题标题】:Rails - Pundit - how to check for current_admin_user?Rails - Pundit - 如何检查 current_admin_user?
【发布时间】:2018-08-25 03:17:07
【问题描述】:

我正在使用 Pundit 对我的用户模型进行授权。

我的目标是扩展它以使用我的 AdminUser 模型,特别是用于我的管理命名空间。

默认情况下,Pundit 会检查“用户”或“当前用户”。如何根据设计更改它以检查“admin_user”或“current_admin_user”?

policies/admin/admin_policy.rb(封闭系统,当前寻找用户而不是管理员用户)

class Admin::AdminPolicy
  attr_reader :user, :record

  def initialize(user, record)
    # Must be logged in
    raise Pundit::NotAuthorizedError, "You must be logged in to perform this action" unless user
    @user = user
    @record = record
  end

  def index?
    false
  end

  def show?
    false
  end

  def create?
    false
  end

  def new?
    create?
  end

  def update?
    false
  end

  def edit?
    update?
  end

  def destroy?
    false
  end

  class Scope
    attr_reader :user, :scope

    def initialize(user, scope)
      raise Pundit::NotAuthorizedError, "You must be logged in to perform this action" unless user
      @user = user
      @scope = scope
    end

    def resolve
      scope.all
    end
  end
end

policies/admin/home_policy.rb(Admin 命名空间的子策略示例)

class Admin::HomePolicy < Admin::AdminPolicy

  def index?
    user.present?
  end

end

【问题讨论】:

    标签: ruby-on-rails devise authorization ruby-on-rails-5 pundit


    【解决方案1】:

    我认为您需要在控制器上定义方法 pundit_user 来自定义它https://github.com/varvet/pundit#customize-pundit-user

    def pundit_user
      current_admin_user
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多