我剛剛從CanCan轉到了Pundit。我不確定一些事情,以及如何使用Pundit。例如。如何使用專家範圍?
如果您有可以擁有多個父對象的資源,例如可以說一個目標屬於學生和教師。因此,一個學生可以有很多目標,一個教師可以有很多目標。在控制器索引操作中,您可能會這樣做:
if params[:student_id].present?
@account = Student.find(params[:student_id])
@goals = @account.goals
elsif params[:instructor_id].present?
@account Instructor.find(params[:instructor_id])
@goals = @account.goals
end
params在策略中不可用,所以需要在此處完成邏輯。我認爲。據我所知,如果您跳過policy_scope,您將在查看目標索引頁面時收到未經授權的錯誤。
請問你:
@goals = policy_scope(@account.goals)
OR
@goals = policy_scope(Goal.scoped).where(account_id: @account.id)
什麼,當你把一堆包括在混合的情況發生?
@example = policy_scoped(@school.courses.includes(:account => :user, :teacher))
或者當需要訂購...這是正確的嗎? policy_scope(Issue.scoped).order(「created_at desc」)
使用範圍時:什麼是:範圍在這裏?是:範圍正在評估的模型的實例?我試圖通過:範圍訪問它的屬性,但沒有奏效。
class Scope < Struct.new(:user, :scope)