是的,這是可能的。
聲明
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