我是 Rails 的新手,对于我的生活,我不会“得到”康康舞。
我已阅读本教程,但无法弄清楚如何将说明应用于我的情况。
在cancan wiki中有:
- 一个管理员控制器
- 一个 roll_logs 动作
在能力课上是这样说的:
can :roll, :logs if user.admin?
我不明白 :roll 和 :logs 符号与控制器和操作有什么关系?
我只想说,如果用户是管理员,请让他们访问 AdminController 操作,否则不要,这可能吗?
我是 Rails 的新手,对于我的生活,我不会“得到”康康舞。
我已阅读本教程,但无法弄清楚如何将说明应用于我的情况。
在cancan wiki中有:
在能力课上是这样说的:
can :roll, :logs if user.admin?
我不明白 :roll 和 :logs 符号与控制器和操作有什么关系?
我只想说,如果用户是管理员,请让他们访问 AdminController 操作,否则不要,这可能吗?
是的,这是可能的。
该声明
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
声明意味着您没有授权资源,这是我们想要的,因为例如您没有授权某个帖子或评论。您只是在控制器上授权操作。