如果授权取决于实例变量,我如何使用 Pundit 授权控制器操作?
How do I authorize a controller action with Pundit if authorization depends on an instance variable?
我有一个 wedding
class,其中有很多 organizers
,并且资源是嵌套的,因此,要查看活动的组织者,我必须访问:/events/23/organizers
组织者的索引控制器是这样的:
Class OrganizersController < ApplicationController
def index
@wedding = Wedding.find(params[:wedding_id]
@organizers = Organizer.where(wedding: @wedding)
end
end
问题是,我如何允许专家授权 OrganizersController 的索引操作,并且仅当对于实例中的 @wedding
,@wedding.organizers.find(user: current_user).present?
?
它们是两个完全不同的模型,一个的授权取决于另一个。
我假设 Organizer
属于 Wedding
,在这种情况下你应该有 @organizers = @wedding.organizers
。
但是,要回答有关专家授权的问题,您应该查看 scopes
。从这里,您可以 return 当前用户作为组织者所属的婚礼。
你还应该有一个关系,当前用户作为组织者有很多婚礼。所以,你会得到类似 current_user.weddings
的东西,因为用户在 organizer
.
期间有很多婚礼
您可以在组织控制器的索引操作中添加 authorize @wedding
吗?猜测您的身份验证已经设置为检查用户是否应该有权访问婚礼。
我最接近的答案是 this。
The way I usually do it, is to add a list_organizers?
predicate to
the wedding policy and then:
authorize(@wedding, :list_organizers?)
It's not terribly elegant though.
如果您找到更好的方法,请回答,我会采纳为更好的方法。
我有一个 wedding
class,其中有很多 organizers
,并且资源是嵌套的,因此,要查看活动的组织者,我必须访问:/events/23/organizers
组织者的索引控制器是这样的:
Class OrganizersController < ApplicationController
def index
@wedding = Wedding.find(params[:wedding_id]
@organizers = Organizer.where(wedding: @wedding)
end
end
问题是,我如何允许专家授权 OrganizersController 的索引操作,并且仅当对于实例中的 @wedding
,@wedding.organizers.find(user: current_user).present?
?
它们是两个完全不同的模型,一个的授权取决于另一个。
我假设 Organizer
属于 Wedding
,在这种情况下你应该有 @organizers = @wedding.organizers
。
但是,要回答有关专家授权的问题,您应该查看 scopes
。从这里,您可以 return 当前用户作为组织者所属的婚礼。
你还应该有一个关系,当前用户作为组织者有很多婚礼。所以,你会得到类似 current_user.weddings
的东西,因为用户在 organizer
.
您可以在组织控制器的索引操作中添加 authorize @wedding
吗?猜测您的身份验证已经设置为检查用户是否应该有权访问婚礼。
我最接近的答案是 this。
The way I usually do it, is to add a
list_organizers?
predicate to the wedding policy and then:authorize(@wedding, :list_organizers?)
It's not terribly elegant though.
如果您找到更好的方法,请回答,我会采纳为更好的方法。