2

我正在使用RailsApps Pundit 教程学习 Pundit,教程中的这句话让我完全困惑:

假设策略对象名为 UserPolicy,我们将使用它来从用户控制器进行授权,您可能会错误地认为策略对象的名称将始终与控制器的名称匹配。事实并非如此。

  1. 如何创建允许具有“role_a”的用户使用 users_controller.index 操作和具有“role_b”的用户使用 orders_controller.index 操作的策略(o 组策略)?

    1.1 这是否需要两个不同的策略(UserPolicy 和 OrderPolicy)或者我应该为每个控制器命名索引操作以在 UserPolicy 上区分它?

4

1 回答 1

2

是的,它需要两种不同的策略(UserPolicyOrderPolicy

#user_policy.rb
class UserPolicy
attr_reader :current_user

  def initialize(current_user)
    @current_user = current_user
  end

  def index?
    @current_user.role_a?
  end
end

在你的index方法中users_controller

def index
  @user = User.find(params[:id])
  authorize @user
end

OrderPolicy 也一样

#order_policy.rb
class OrderPolicy
attr_reader :current_user

  def initialize(current_user)
    @current_user = current_user
  end

  def index?
    @current_user.role_b?
  end
end

在你的index方法中orders_controller

def index
  @user = User.find(params[:id])
  authorize @user
end
于 2015-07-28T06:31:32.290 回答