CanCanでmodelと関連のないcontrollerでのアクセスを許可する

モデルと関連のないコントローラーについて、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

なんか空のモデルを作ってる回答例とかもあったけれど、こっちのほうがスマートですわ。


カテゴリー Ruby, Ruby on Rails | タグ | パーマリンク

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です