簡體   English   中英

在Rails CanCanCan授權中檢查動作參數

[英]Checking action parameters in Rails CanCanCan Authorization

ability.rb定義能力時是否可以訪問控制器參數?

我有一個活動,可以加入或創建該活動的用戶。 似乎我可以為每種可能的情況創建不同的控制器動作,例如,用戶注冊自己參加某個事件,或者創建者從該事件中刪除某人。 但是,我認為閱讀較少的動作並能夠基於從客戶端傳遞的參數定義功能會容易得多。

回答

@chumakoff下面有一些不錯的信息,有助於解釋CanCanCan的工作方式。 我決定默認情況下在ability.rb授權這些操作,然后引發錯誤,例如,如果我檢測到錯誤的用戶/事件,則在控制器中引發錯誤raise CanCan::AccessDenied.new("You cannot delete someone else from this event") 。發送的參數ID。

如果我理解正確,則說明您使用的是cancan的authorize_resourceload_and_authorize_resource控制器幫助程序,它們根據控制器操作名稱計算用戶能力。

但是,不必強制使用此助手進行所有操作。 您可以跳過具有復雜能力邏輯的動作,並手動檢查能力。

例如:

class ParticipationsController < ApplicationController
  authorize_resource except: :create # skiping `authorize_resource` for `create` action

  # ...

  def create
    if creator_adds_someone_to_event?
      authorize! :add_to, @event
    end

    if user_signs_up_for_event?
      authorize! :sign_up_for, @event
    end
    # ...
  end

因此,您可以在同一控制器操作中檢查許多不同的功能。 只需禁用該動作的默認cancancan's行為即可。

是的,有一個名為“ pry”的調試工具。 使用它會幫助你。 只要您想在代碼中檢查參數值的地方都使用binding.pry ,控制台將在此時停止執行,因此您可以檢查參數的值。

暫無
暫無

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

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