ユーザーが「supplier_id」によって配送リストのアイテムにのみアクセスできるように制限する必要があります。「accessible_by」を使用して「where」句を追加できることはわかっています。しかし、accessible_by スコープをクエリに追加するのを忘れると、次のコントローラーのアクション インデックスで、ユーザーは任意のリストを読み取ることができます。
class SupplierShippingListsController < ApplicationController
load_and_authorize_resource
def index
@shipping_lists = SupplierShippingList.where(:supplier_id => params[:supplier_id])
authorize! :read, SupplierShippingList
end
end
最初にこのルールを定義しました。インスタンスのホッピングはハッシュに対してチェックされますが、:supplier_id が無意味であるかのようにチェックされません。
can :read, SupplierShippingList, :supplier_id => user.company_id
そのため、ランダムな値でブロックして承認を失敗させようとしましたが、ユーザーは引き続きアクションにアクセスできます。
can :read, SupplierShippingList do |list|
list.supplier_id == 17
end
設定する隠し要素はありますか?
編集
私も試しました
authorize! :read, @shipping_lists
役に立たない。