
はじめに
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