我正在使用RailsApps Pundit Tutorial学习Pundit,教程中的这句话让我很困惑:
鉴于策略对象名为UserPolicy,我们将使用它 对于来自Users控制器的授权,您可能会错误地假设 策略对象的名称将始终与该名称相匹配 控制器。事实并非如此。
如何创建一个策略(o策略集),允许用户使用" role_a"使用带有" role_b"的users_controller.index操作和用户使用orders_controller.index动作?
1.1这是否需要两个不同的策略(UserPolicy和OrderPolicy),还是应该以不同的方式为每个控制器命名索引操作,以便在UserPolicy上区分它?
答案 0 :(得分:2)
是的,它需要两个不同的政策( UserPolicy 和 OrderPolicy )
#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