cancan:“管理”与“读取,创建,更新和销毁”组合之间的区别?

时间:2011-08-14 14:12:27

标签: ruby-on-rails-3 cancan

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

  can :manage, Model

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

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

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

感谢。

2 个答案:

答案 0 :(得分:16)

默认情况下,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

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

:manage

当前用户仍然可以访问控制器的can :manage, Neighborhood 方法。

因此,:do_cool_things允许您执行任何操作,但:manage只是无限数量的CanCan操作中的4个,您可以定义这些操作并映射到您选择的任何控制器操作。

答案 1 :(得分:12)

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