2013-05-03 45 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