嵌套资源CancanCan授权

Cancancan authorisation of nested resources

我有一个帐户模型,其中 "has many" 用户和 "has many" 仪表。 Meter 对象有一个 account_id 列,因此很容易在 Cancancan 中为此定义一个能力:

if user
  can :crud, Meter, :account_id => user.account_id
end

然而,一个 Meter 也 "has many" 参数。我想做一个类似的能力定义,仅当参数属于与用户属于同一帐户的仪表时才允许 CRUD 访问。

由于参数模型只有 meter_id 列(而不是 account_id 列),我不确定实现这种额外嵌套级别的最佳方法?

编辑

抱歉不清楚。

我的模型如下:

Account > User (account_id) 
        > Meter (account_id) > Parameter (meter_id)

所以我可以检查 user.account_id = meter.account_id,但我不确定如何检查参数。

编辑 2

除了 Matt 的回答,这只是一个包含的情况:

  load_and_authorize_resource :meter
  load_and_authorize_resource through: :meter

在参数模型中。

if user
  can :crud, Parameter, meter: { account_id: user.account_id }
end