我需要限制用户只能通过“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
无济于事。