Rails 6 Singular Routes and CanCanCan



我有一个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关联的倒数)

相关内容

  • 没有找到相关文章

最新更新