如何将能力应用于cancan中的非宁静控制器

时间:2013-05-03 00:04:08

标签: ruby-on-rails-3 cancan

我是新手,对于我的生活,我不会“得到”康康。

我已阅读this tutorial,但无法弄清楚如何将指示应用于我的情况。

在cancan wiki中有:

  • 一个AdminController
  • roll_logs操作

在能力类中说:

can :roll, :logs if user.admin?

我不明白:roll和:logs符号与控制器和动作有什么关系?

我想要做的就是说,如果用户是管理员,请让他们访问AdminController操作,否则,这可能吗?

1 个答案:

答案 0 :(得分:1)

是的,这是可能的。

声明

can :roll, :logs if user.admmin?

表示在调用authorize! :roll, :logs时,如果用户不是管理员,则会引发未经授权的异常。

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

如果您有一个带有动作滚动的logs_controller,您可以执行类似的操作。

class LogsController < ApplicationController

  def roll
    authorize! :roll, :logs

    # Rest of the roll functionality.
  end

因此,在您的示例中,您希望授予具有管理员权限的用户访问所有管理控制器操作。

你可以这样做。

<强> ability.rb

class Ability
  include CanCan::Ability

  def initialize(user)
    can(:manage, :admin) if user.admin?
  end
end

<强> admin_controller.rb

class AdminController < ApplicationController

 authorize_resource :class => false

 def foo
 end

 def bar
 end

end

这将确保只有管理员可以访问admin_controller的foo和bar操作。

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

相关问题