Ruby on rails 3 如何在cancan中将功能应用于非restful控制器

Ruby on rails 3 如何在cancan中将功能应用于非restful控制器,ruby-on-rails-3,cancan,Ruby On Rails 3,Cancan,我是rails的新手,就我的一生而言,我不会“得到”cancan 我读过,但不知道如何将说明应用于我的情况 在cancan wiki中有: 管理员控制器 滚球动作 能力课上说: can :roll, :logs if user.admin? 我不明白:roll和:logs符号与控制器和操作有什么关系 我想做的就是说,如果用户是管理员,请给他们访问AdminController操作的权限,否则不允许,这可能吗?是,这可能 声明 can :roll, :logs if user.admmin?

我是rails的新手,就我的一生而言,我不会“得到”cancan

我读过,但不知道如何将说明应用于我的情况

在cancan wiki中有:

  • 管理员控制器
  • 滚球动作
能力课上说:

can :roll, :logs if user.admin?
我不明白:roll和:logs符号与控制器和操作有什么关系

我想做的就是说,如果用户是管理员,请给他们访问AdminController操作的权限,否则不允许,这可能吗?

是,这可能

声明

can :roll, :logs if user.admmin?
表示调用
authorize!:滚动,:logs
如果用户不是管理员,则会引发未经授权的异常

所以它与控制器或动作没有任何关系,除非你这样做

例如,如果您有一个带有动作滚轮的logs_控制器,您可以执行类似的操作

class LogsController < ApplicationController

  def roll
    authorize! :roll, :logs

    # Rest of the roll functionality.
  end
管理控制器.rb

class Ability
  include CanCan::Ability

  def initialize(user)
    can(:manage, :admin) if user.admin?
  end
end
class AdminController < ApplicationController

 authorize_resource :class => false

 def foo
 end

 def bar
 end

end
class AdminControllerfalse
德福
结束
def棒
结束
结束
这将确保只有管理员可以访问admin\u控制器的foo和bar操作

:class=>false
语句表示您没有授权某个资源,这是我们想要的,因为您没有授权某个帖子或评论。您只是在授权控制器上的操作。

是的,这是可能的

声明

can :roll, :logs if user.admmin?
表示调用
authorize!:滚动,:logs
如果用户不是管理员,则会引发未经授权的异常

所以它与控制器或动作没有任何关系,除非你这样做

例如,如果您有一个带有动作滚轮的logs_控制器,您可以执行类似的操作

class LogsController < ApplicationController

  def roll
    authorize! :roll, :logs

    # Rest of the roll functionality.
  end
管理控制器.rb

class Ability
  include CanCan::Ability

  def initialize(user)
    can(:manage, :admin) if user.admin?
  end
end
class AdminController < ApplicationController

 authorize_resource :class => false

 def foo
 end

 def bar
 end

end
class AdminControllerfalse
德福
结束
def棒
结束
结束
这将确保只有管理员可以访问admin\u控制器的foo和bar操作


:class=>false
语句表示您没有授权某个资源,这是我们想要的,因为您没有授权某个帖子或评论。您只是在授权控制器上的操作。

+1非常感谢Arjan,您的解释非常清楚!我希望文档中有这么清楚!再次感谢,非常感谢。+1非常感谢Arjan,你的解释非常清楚!我希望文档中有这么清楚!再次感谢,非常感谢。