はい、これは可能です。
ステートメント
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
したがって、この例では、すべての管理コントローラー アクションにアクセスするための管理者アクセス許可をユーザーに付与します。
こんな感じで達成できます。
アビリティ.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
ステートメントは、リソースを承認していないことを意味します。たとえば、特定の投稿やコメントを承認していないため、これは私たちが望んでいることです。コントローラーでのアクションを承認しているだけです。