是的,这是可能的。
声明
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和酒吧的行动。
:class => false
声明意味着您没有授权资源,这是我们想要的资源,因为您不是例如授权某个帖子或评论。您只是在控制器上授权操作。
+1非常感谢Arjan,你的解释非常清楚!我希望在文档中明确这一点!再次感谢,非常感谢。 – andy 2013-05-12 06:44:27