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