1

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

我已阅读本教程,但无法弄清楚如何将说明应用于我的情况。

在cancan wiki中有:

  • 一个管理员控制器
  • 一个 roll_logs 动作

在能力课上是这样说的:

can :roll, :logs if user.admin?

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

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

4

1 回答 1

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

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

你可以这样实现。

能力.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声明意味着您没有授权资源,这是我们想要的,因为例如您没有授权某个帖子或评论。您只是在控制器上授权操作。

于 2013-05-03T08:38:32.450 回答