はじめに
Pundit
を使った権限管理の実装方法のメモ。
やりたいこと
権限管理の機能を簡単に実装したい。
実現方法
Pundit
を使う。
実装
application_controller
Pundit
をインクルードする
class ApplicationController < ActionController::Base include Pundit
application全体のpolicy
- policyクラスを
app/policies/
に配置する ApplicationPolicy
で基本的なpolicyを定義する
class ApplicationPolicy attr_reader :user, :record def initialize(user, record) @user = user @record = record end def index? user.accessible?(record) end ・・・ end
Model独自のpolicyを定義する
ApplicationPolicy
を継承するrecord
はモデルオブジェクトが入る
class HogePolicy < ApplicationPolicy def edit? record.fuga_flg && user.accessible?(record) || user.hoge_admin? end end
controllerの実装
before_action
で権限チェックすると便利authorize
メソッドは、引数に渡した@hoge
から対応するHogePolicy
を確認して、current_user
とrecord
を返す
class HogeController < ApplicationController before_action :authorize_user def authorize_user set_hoge if params[:id] authorize @hoge end end