Module: Placet::Rails::Controller

Extended by:
ActiveSupport::Concern
Defined in:
lib/placet/rails/controller.rb

Overview

コントローラ統合(PEP ヘルパー。docs/rails-usage.md Section 4)

class ApplicationController < ActionController::Base
include Placet::Rails::Controller
placet_verify!
end

class PostsController < ApplicationController
before_action :set_post, only: %i[update destroy]
placet_resource Post
placet_permit "post:publish", only: :publish, resource: -> { @post }
end

Instance Method Summary collapse

Instance Method Details

#placet_permit?(actions, resource = nil) ⇒ Boolean

表示制御用。enforcement にはカウントされない

Returns:

  • (Boolean)


112
# File 'lib/placet/rails/controller.rb', line 112

def placet_permit?(actions, resource = nil) = Placet.permit?(placet_user, actions, resource)

#placet_recheck(records, action: nil) ⇒ Object

二段構えの再チェック(docs/rails-usage.md Section 6)。scope で絞った結果 (通常は 1 ページ分)へ個体判定を再適用し、check / scope の乖離があっても 見えてはいけないレコードを返さない。action 省略時は scope 宣言から引き継ぐ



117
118
119
120
# File 'lib/placet/rails/controller.rb', line 117

def placet_recheck(records, action: nil)
  action ||= placet_scope_declaration![:actions].first
  Placet.recheck(placet_user, action, records)
end

#placet_scope(model = nil) ⇒ Object

via: :scope の宣言から合成済みコレクション(AR なら Relation)を返す



105
106
107
108
109
# File 'lib/placet/rails/controller.rb', line 105

def placet_scope(model = nil)
  declaration = placet_scope_declaration!
  target = model || declaration[:model] || declaration[:model_name].constantize
  Placet.scoped(placet_user, declaration[:actions].first, model: target)
end

#placet_userObject

アプリ側で上書き可能。既定は current_user



102
# File 'lib/placet/rails/controller.rb', line 102

def placet_user = current_user