Zenn
💎

Rails に Pundit を導入して権限管理できるようにする(1)

2025/03/30に公開

お家の検証サーバ用の備忘録です。

前提

前提です。

https://zenn.dev/asterisk9101/articles/ruby_on_rails8-5

pundit導入

bundle add pundit
bundle exec rails g pundit:install

各コントローラで使えるように ApplicationController でインクルードします。

vi app/controllers/application_controller.rb
class ApplicationController < ActionController::Base
  include Pundit::Authorization
# ...

部署への参加・脱退は自分の分だけに制限するポリシー

Membership コントローラーに Authorize を仕込みます。

vi app/controllers/memberships_controller.rb
def create
  @membership = Membership.new(membership_params)
  authorize @membership
  # ...

def destroy
  authorize @membership
  # ...

ポリシーを作ります。

vi app/policies/membership_policy.rb
class MembershipPolicy < ApplicationPolicy
  def create?
    admin? || (self? && public?)
  end

  def destroy?
    admin? || self?
  end

  private
    def admin?
      user.id == 1
    end

    def self?
      user.id == record.user.id
    end

    def public?
      not record.section.private?
    end
end

https://zenn.dev/asterisk9101/articles/ruby_on_rails8-7

GitHubで編集を提案

Discussion

ログインするとコメントできます