0

ユーザーが「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

役に立たない。

4

2 に答える 2

1

使用load_and_authorize_resourceしているため、何もする必要はありません。インデックス アクションではsupplier_shipping_listscan :read, SupplierShippingList, :supplier_id => user.company_id. それが機能しない場合、に適用されている他のルールはありSupplierShippingListますか?

于 2013-03-31T22:33:52.020 に答える