嵌套资源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
我有一个帐户模型,其中 "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