【问题标题】:How can I use Cancan to grant users privileges with exception?如何使用 Cancan 授予用户特权,但有例外?
【发布时间】:2016-04-19 14:25:42
【问题描述】:

在我的应用程序中,我有一个名为 Profile 的模型,其中包含人员的个人资料信息。我还有一个用户模型,一些用户管理网站上的内容,他们的权限是使用 Cancan gem 管理的。每个用户都有一个配置文件,但有许多配置文件与用户无关。假设我有两类用户,大量可以管理内容的“编辑”和一些可以做任何事情的“管理员”。我想让编辑者可以管理(创建、编辑和删除)配置文件除非该配置文件属于另一个用户。我怎么能用康康做到这一点?

我知道如何限制用户的能力,比如

can :manage, Profile, :user_id => user.id

但我想要一个逻辑条件,例如“可以管理个人资料,除非该个人资料与用户相关联并且该用户不是当前用户”。

【问题讨论】:

    标签: ruby-on-rails cancan


    【解决方案1】:

    @Laurens 是正确的。使用 cancancan。
    您也可以将块传递给 can 或 cannot 方法,例如:

    cannot :manage Profile do |p|
      cond1 = method_that_returns_boolean
      cond2 = method_that_returns_boolean
      cond1 && cond2
    end
    

    这意味着如果 cond1 和 cond2 都为真,则用户无法管理配置文件。

    【讨论】:

      【解决方案2】:

      CanCan 已过时。

      我建议你看看https://github.com/CanCanCommunity/cancancan/

      得到你想要的(未经测试)

      can :manage, Profile, :user_id => [nil, user.id]
      

      对于更复杂的情况,您可以使用块定义能力: https://github.com/CanCanCommunity/cancancan/wiki/Defining-Abilities-with-Blocks

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-10-05
        • 1970-01-01
        相关资源
        最近更新 更多