這兩種說法基本一樣嗎?如果不是,那么第二個版本應該是什么樣的?幕后發生了什么?
can :index, User, approved: true
can :index, User do |user|
user.approved?
end
我無法使測驗的“塊”版本正常作業。其他一切正常......但塊不起作用。我顯然做錯了什么,所以我試圖理解。謝謝。
uj5u.com熱心網友回復:
將實體傳遞給規則時,將使用帶塊的規則:
can?(:show, User.first)
這個index動作很特別,因為沒有 User 的實體傳遞給規則,你不是加載一個特定的用戶,而是多個。
所以,
can :index, User, approved: true
當UserController#index操作被擊中時,假設您有load_and_authorize_resource(或類似的地方),它將加載@users所有帶有approved: true. 如果沒有條件,將加載所有用戶。這很簡單。
現在,
can :index, User do |user|
user.approved?
end
如果規則有一個塊并且實體沒有傳遞給它(正如我上面所說的),規則將始終回傳true為authorized, 但不會加載任何用戶。
更多解釋,在這里。
uj5u.com熱心網友回復:
https://gitlab.quints.io/quints/bi_backend/-/blob/pre_production/app/models/payment_system/bank_transfer_requisite.rb#L61
請注意,如果將塊傳遞給 can 或 cannot,則該塊僅在將類的實體傳遞給 can? 還是不能?呼叫。
如果您使用塊定義了 can 或 not 并且物件未通過,則檢查將通過。
也許這是答案?
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/334373.html
