在尝试调试cancan的使用时,我发现如果使用以下内容,我可以通过访问的消息:
can :manage, Model
当我将其更改为以下内容时,我被拒绝访问:
can :read, Model can :create, Model can :update, Model can :destroy, Model
manage的内容包括read,create,update和destroy的组合不包括?
谢谢.
默认情况下惨惨的地图:read
,:create
等来了相关负责人的行动.例如:
def default_alias_actions { :read => [:index, :show], :create => [:new], :update => [:edit], } end
但是,当然,您不仅限于在控制器中执行这些操作,最终控制器操作可以具有任何名称.出于同样的原因,您不仅限于:read, :create, :update, :detroy
在CanCan中使用.您可以将任何符号别名为任何控制器操作.让我们说你在你的控制器上有一个动作do_cool_things
,你可以将任何符号别名为CanCan使用的动作,例如:
alias_action :do_cool_things, :to => :coolify
然后你就可以这样做:
can :coolify, Neighborhood
这意味着当前用户可以访问该:do_cool_things
方法NeighborhoodsController
.但是,如果你曾经使用过,:manage
那么就不需要定义这个单独的动作,因为它:manage
是一个全能的.所以如果你做了:
can :manage, Neighborhood
当前用户仍然可以访问:do_cool_things
控制器的方法.
因此,:manage
您可以执行任何操作,但:read, :create, :update and :destroy
只有无限数量的CanCan操作中的4个可以定义并映射到您选择的任何控制器操作.
您可以定义自定义操作(当您为给定模型定义用户的能力时,您不仅限于7个RESTful操作(创建,更新,销毁等),您可以创建自己的操作.)如果您管理了所有操作,您也可以访问这些自定义操作.