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