【问题标题】:Rails 6 Singular Routes and CanCanCanRails 6 奇异路线和 CanCanCan
【发布时间】:2021-10-23 01:40:58
【问题描述】:

我有一个 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 进行授权的复数控制器。

有什么想法吗?

【问题讨论】:

  • 你不能用current_user.account之类的东西来获取帐号吗?

标签: ruby-on-rails ruby-on-rails-6 cancan cancancan


【解决方案1】:

这里有几件事。首先,您的路线完全独立于您的 Cancancan 资源(Cancancan 处理资源而不是路线,即使在两种情况下某些术语相同。)因此,无论您定义什么路线,这与您定义的能力完全不同康康康舞。

下一步是正确设置您的能力,以便您的用户可以获得正确的记录。在我看来,您的能力是正确的:当@account.id 匹配@user.account_id 时,用户可以读取帐户记录。

因此,您应该能够使用@user.account 并通过您设置的常规 Rails 关联取回关联的 Account 记录。 (我假设帐户 has_many 用户是您为用户模型设置的 belongs_to 关联的倒数。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-17
    • 1970-01-01
    • 2021-08-27
    • 1970-01-01
    • 1970-01-01
    • 2011-05-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多