module ActionPolicy::Policy::PreCheck

Adds callback-style checks to policies to extract common checks from rules.

class ApplicationPolicy < ActionPolicy::Base
  authorize :user
  pre_check :allow_admins

  private
    # Allow every action for admins
    def allow_admins
      allow! if user.admin?
    end
end

You can specify conditional pre-checks (through `except` / `only`) options and skip already defined pre-checks if necessary.

class UserPolicy < ApplicationPolicy
  skip_pre_check :allow_admins, only: :destroy?

  def destroy?
    user.admin? && !record.admin?
  end
end