在尝试调试cancan的使用时,我发现如果使用以下内容我可以通过访问的消息:
can :manage, Model
当我将其更改为以下内容时,我被拒绝访问:
can :read, Model
can :create, Model
can :update, Model
can :destroy, Model
manage包括read,create,update和destroy的组合不包含什么?
感谢。
答案 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操作(创建,更新,销毁等),您可以创建自己的。)如果您有管理所有,您也可以访问这些自定义操作。