我有一个Rails 6应用程序,正在使用CanCanCan来授权资源。
对于我的多个资源,CanCanCan有load_and_authorize
方法,它可以查看我的能力,用户可以访问哪些资源。
但是我知道我希望用户可以看到它的帐户。
在我的用户模型中我有
belongs_to :account
一个帐户可以有多个用户。
在我的能力
can [:read], Account, id: user.account_id
用户可以访问:/accounts/:id
但我希望他能访问/account
。
所以我创建了一个单一资源resource :account
但是我现在如何加载帐户资源?我希望CanCanCan能帮我。但似乎并非如此。唯一的解决方案真的是用Account.find(id)
加载资源吗?这似乎不是一个干净的解决方案,因为单一路由路由到复数控制器,我有CanCanCan进行授权。
任何想法?
这里有几件事。首先,你的路由完全独立于你的Cancancan资源(Cancancan处理的是资源,而不是路由,尽管这两种情况下的一些术语是相同的)。所以,无论你定义了什么路由,它都与你为Cancancan定义的能力完全不同。
下一步是正确设置您的功能,以便您的用户可以获得正确的记录。在我看来,你的能力是正确的:当@account.id
匹配@user.account_id
时,用户可以读取帐户记录。
因此,您应该能够使用@user.account
并通过您设置的通常的Rails关联获取关联的帐户记录。(我假设帐户has_many
用户,在您为用户模型设置的belongs_to
关联的倒数)