簡體   English   中英

如果授權取決於實例變量,如何使用Pundit授權控制器動作?

[英]How do I authorize a controller action with Pundit if authorization depends on an instance variable?

我的wedding課上有很多organizers ,並且資源是嵌套的,因此,要查看活動的組織者,我必須訪問: /events/23/organizers

組織者的索引控制器如下所示:

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

麻煩的是,僅當實例中的@wedding@wedding.organizers.find(user: current_user).present? ,我如何才能讓pundit授權OrganizersController的索引操作@wedding.organizers.find(user: current_user).present?

它們是兩個完全不同的模型,一個模型的授權取決於另一個模型。

我假設一個Organizer屬於Wedding在這種情況下,您應該有@organizers = @wedding.organizers

但是,要回答有關專家授權的問題,應查看scopes 在這里,您可以作為組織者返回當前用戶所屬的婚禮。

您還應該與當前用戶有很多婚禮作為組織者的關系。 所以,你必須像current_user.weddings因為用戶通過擁有眾多的婚禮organizer

我最接近的答案是這個

我通常的做法是添加一個list_organizers? 制定婚禮政策,然后:

 authorize(@wedding, :list_organizers?) 

雖然不是很優雅。

如果您找到了一種更好的方法,請回答,我會接受它作為更好的方法。

您可以在組織控制器的索引操作中添加authorize @wedding嗎? 猜測您的身份驗證,已經設置了檢查用戶是否應該訪問婚禮的權限。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM