如果授权依赖于实例变量,如何使用Pundit授权控制器操作?

时间:2016-10-17 02:57:54

标签: ruby-on-rails authorization pundit

我有一个wedding课程,其中包含许多organizers,并且资源已嵌套,因此,要查看活动的组织者,我必须访问:/events/23/organizers

组织者的索引控制器是这样的:

Class OrganizersController < ApplicationController
  def index
    @wedding = Wedding.find(params[:wedding_id]
    @organizers = Organizer.where(wedding: @wedding)
  end
end

麻烦的是,我如何允许权威人员为OrganizersController授权索引操作,并且只有在实例中@wedding {@ 1}}时才会这样做?

他们是两个完全不同的模型,一个人的授权取决于其他模式。

3 个答案:

答案 0 :(得分:0)

我假设Organizer属于Wedding,在这种情况下您应该@organizers = @wedding.organizers

但是,要回答关于权威授权的问题,您应该查看scopes。从这里,您可以返回当前用户所属的婚礼作为组织者。

您还应该将当前有许多婚礼用户的关系作为组织者。所以,你会有类似current_user.weddings的东西,因为用户通过organizer举办了许多婚礼。

答案 1 :(得分:0)

最近我得到的答案是this

  

我通常这样做的方法是添加一个list_organizers?谓词   婚礼政策然后:

authorize(@wedding, :list_organizers?)
     

虽然它并不是非常优雅。

如果您找到更好的方法,请回答,我会接受它作为更好的方法。

答案 2 :(得分:-1)

您可以在组织控制器的索引操作中添加 authorize @wedding 吗?猜测您的身份验证已经设置,以检查用户是否应该有权参加婚礼。

&#xA;