2013-05-03 42 views
1

我是新来的铁路和我的生活我不会“得到”康康。如何将能力应用于康康中的非宁静控制器

我读过this tutorial,但无法弄清楚如何将说明应用于我的情况。

在康康舞维基有:

  • 的AdminController
  • 一个roll_logs行动

在能力类是说:

can :roll, :logs if user.admin? 

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

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

回答

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和酒吧的行动。

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

+0

+1非常感谢Arjan,你的解释非常清楚!我希望在文档中明确这一点!再次感谢,非常感谢。 – andy 2013-05-12 06:44:27