【问题标题】:cancan: the difference between "manage" and the combination of "read, create, update and destroy"?cancan:“管理”与“读、创建、更新、销毁”组合的区别?
【发布时间】:2011-08-14 14:12:27
【问题描述】:

在尝试调试 cancan 的使用时,我发现如果使用以下内容,我可以通过 accessdenied 消息:

  can :manage, Model

当我将其更改为以下内容时,我被拒绝访问:

  can :read, Model
  can :create, Model
  can :update, Model
  can :destroy, Model

manage 包括 read、create、update 和 destroy 的组合不包括什么?

谢谢。

【问题讨论】:

    标签: ruby-on-rails-3 cancan


    【解决方案1】:

    默认情况下,CanCan 将:read:create 等映射到相关的控制器操作,例如:

    def default_alias_actions
      {
        :read => [:index, :show],
        :create => [:new],
        :update => [:edit],
      }
    end
    

    但是,当然,您不仅限于在控制器中拥有这些动作,最终控制器动作可以有任何名称。出于同样的原因,您不仅限于在 CanCan 中拥有 :read, :create, :update, :detroy。您可以将任何符号别名到任何控制器操作。假设您在控制器上有一个名为 do_cool_things 的操作,然后您可以将任何符号别名到该操作以供 CanCan 使用,例如:

    alias_action :do_cool_things, :to => :coolify
    

    然后你就可以这样做了:

    can :coolify, Neighborhood
    

    这意味着当前用户可以访问NeighborhoodsController:do_cool_things 方法。但是,如果您使用了:manage,则不需要定义此单独的操作,因为:manage 是一个包罗万象的功能。所以如果你做了:

    can :manage, Neighborhood
    

    当前用户仍然可以访问控制器的:do_cool_things 方法。

    所以,:manage 可以让您做任何事情,但 :read, :create, :update and :destroy 只是您可以定义并映射到您选择的任何控制器操作的无数 CanCan 操作中的 4 个。

    【讨论】:

    • +1 获取所有提供的酷信息。谢谢。试图弄清楚如何最好地设计我的能力模型。如果我发布相关问题,我会通知您。
    【解决方案2】:

    您可以定义自定义操作(当您为给定模型定义用户的能力时,您不限于 7 个 RESTful 操作(创建、更新、销毁等),您可以创建自己的操作。)如果您有管理所有,您也可以访问这些自定义操作。

    【讨论】:

    • 感谢您的帮助。我不知道它对行动有效。我认为它与通过模型访问数据的方式严格相关。应用程序中有如此多的自定义操作,能力模型的大小和复杂性可能会增加三倍。该死!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-10
    • 2019-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-06
    相关资源
    最近更新 更多