cancancanでモデル名に紐づかない制御をする方法


はじめに

権限制御のgemとして、cancancanがあると思います。
基本的な使い方はいろいろなところで記事になっていますが、「コントローラ名通りのモデルがないとき」の権限制御方法について記載します。

コントローラで次のように記載

class ProfilesController
  authorize_resource  class: :profile # ここではコントローラ名と同じprofileにしていますが、コントローラと名前を揃える必要もないです

  def new 
    ...
  end

  def edit
    ...
  end

end

シンボルの形で描くことで、モデルがなくても権限管理することができます。
あとは通常の使い方と同じで、abilityクラスで定義していきます。

class Ability
  include CanCan::Ability
  
  def initialize(user)
    if user.admin? # もしユーザーがadminなら全ての権限を付与
      can :manage, :profile
    elsif user.company? # もしユーザーがcompanyなら閲覧のみ可能
      can :read, :profile
    else # いずれでもなければ全てのアクションを不許可
      cannot :manage, :profile
    end
  end
end

参考

基本的な使い方は以下などを参考にすると良いと思います。
Rails|CanCanCanの使い方解説