モデルと関連のないコントローラーについて、CanCanでどのように設定するのかがわからなかったので、調べてみた。
結果としては、
- コントローラーでauthorize_resource class: falseに設定する。
- ability.rbでcanの第2引数にコントローラー名のシンボルを渡す。
という感じだった。
コントローラー側
class HogeController < ApplicationController authorize_resource class: false # 略 end
Ability側
class Ability
include CanCan::Ability
def initialize(user)
unless user.nil?
case user.role.code
when "manager"
can :manage, :all
else
can :manage, :hoge # コントローラー名のシンボルを記述
end
else
cannot :manage, :all
end
end
end
なんか空のモデルを作ってる回答例とかもあったけれど、こっちのほうがスマートですわ。
