@@ -5,11 +5,13 @@ class ApplicationController < ActionController::Base
55 def index
66 authorize_resource ( resource_class )
77 search_term = params [ :search ] . to_s . strip
8- resources = filter_resources ( scoped_resource , search_term : search_term )
8+ authorized_scope = authorize_scope ( scoped_resource )
9+ resources = filter_resources ( authorized_scope , search_term : search_term )
910 resources = apply_collection_includes ( resources )
1011 resources = order . apply ( resources )
1112 resources = paginate_resources ( resources )
1213 page = Administrate ::Page ::Collection . new ( dashboard , order : order )
14+ page . context = self
1315
1416 render locals : {
1517 resources : resources ,
@@ -20,28 +22,39 @@ def index
2022 end
2123
2224 def show
25+ page = Administrate ::Page ::Show . new ( dashboard , requested_resource )
26+ page . context = self
2327 render locals : {
24- page : Administrate :: Page :: Show . new ( dashboard , requested_resource )
28+ page : page
2529 }
2630 end
2731
2832 def new
29- resource = new_resource
30- authorize_resource ( resource )
33+ resource = new_resource . tap do |resource |
34+ authorize_resource ( resource )
35+ contextualize_resource ( resource )
36+ end
37+
38+ page = Administrate ::Page ::Form . new ( dashboard , resource )
39+ page . context = self
3140 render locals : {
32- page : Administrate :: Page :: Form . new ( dashboard , resource )
41+ page : page
3342 }
3443 end
3544
3645 def edit
46+ page = Administrate ::Page ::Form . new ( dashboard , requested_resource )
47+ page . context = self
3748 render locals : {
38- page : Administrate :: Page :: Form . new ( dashboard , requested_resource )
49+ page : page
3950 }
4051 end
4152
4253 def create
43- resource = new_resource ( resource_params )
44- authorize_resource ( resource )
54+ resource = new_resource ( resource_params ) . tap do |resource |
55+ authorize_resource ( resource )
56+ contextualize_resource ( resource )
57+ end
4558
4659 if resource . save
4760 yield ( resource ) if block_given?
@@ -50,8 +63,10 @@ def create
5063 notice : translate_with_resource ( "create.success" )
5164 )
5265 else
66+ page = Administrate ::Page ::Form . new ( dashboard , resource )
67+ page . context = self
5368 render :new , locals : {
54- page : Administrate :: Page :: Form . new ( dashboard , resource )
69+ page : page
5570 } , status : :unprocessable_entity
5671 end
5772 end
@@ -64,8 +79,10 @@ def update
6479 status : :see_other
6580 )
6681 else
82+ page = Administrate ::Page ::Form . new ( dashboard , requested_resource )
83+ page . context = self
6784 render :edit , locals : {
68- page : Administrate :: Page :: Form . new ( dashboard , requested_resource )
85+ page : page
6986 } , status : :unprocessable_entity
7087 end
7188 end
@@ -184,11 +201,16 @@ def dashboard
184201 def requested_resource
185202 @requested_resource ||= find_resource ( params [ :id ] ) . tap do |resource |
186203 authorize_resource ( resource )
204+ contextualize_resource ( resource )
187205 end
188206 end
189207
190208 def find_resource ( param )
191- scoped_resource . find ( param )
209+ authorize_scope ( scoped_resource ) . find ( param )
210+ end
211+
212+ def authorize_scope ( scope )
213+ scope
192214 end
193215
194216 def scoped_resource
@@ -203,7 +225,7 @@ def apply_collection_includes(relation)
203225
204226 def resource_params
205227 params . require ( resource_class . model_name . param_key )
206- . permit ( dashboard . permitted_attributes ( action_name ) )
228+ . permit ( dashboard . permitted_attributes ( action_name , self ) )
207229 . transform_values { |v | read_param_value ( v ) }
208230 end
209231
@@ -285,6 +307,13 @@ def authorize_resource(resource)
285307 end
286308 end
287309
310+ # Override this if you want to contextualize the resource differently.
311+ #
312+ # @param resource A resource to be contextualized.
313+ # @return nothing
314+ def contextualize_resource ( resource )
315+ end
316+
288317 def paginate_resources ( resources )
289318 resources . page ( params [ :_page ] ) . per ( records_per_page )
290319 end
0 commit comments