@@ -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,9 @@ def update
6479 status : :see_other
6580 )
6681 else
82+ page = Administrate ::Page ::Form . new ( dashboard , requested_resource )
6783 render :edit , locals : {
68- page : Administrate :: Page :: Form . new ( dashboard , requested_resource )
84+ page : page
6985 } , status : :unprocessable_entity
7086 end
7187 end
@@ -184,11 +200,16 @@ def dashboard
184200 def requested_resource
185201 @requested_resource ||= find_resource ( params [ :id ] ) . tap do |resource |
186202 authorize_resource ( resource )
203+ contextualize_resource ( resource )
187204 end
188205 end
189206
190207 def find_resource ( param )
191- scoped_resource . find ( param )
208+ authorize_scope ( scoped_resource ) . find ( param )
209+ end
210+
211+ def authorize_scope ( scope )
212+ scope
192213 end
193214
194215 def scoped_resource
@@ -203,7 +224,7 @@ def apply_collection_includes(relation)
203224
204225 def resource_params
205226 params . require ( resource_class . model_name . param_key )
206- . permit ( dashboard . permitted_attributes ( action_name ) )
227+ . permit ( dashboard . permitted_attributes ( action_name , self ) )
207228 . transform_values { |v | read_param_value ( v ) }
208229 end
209230
@@ -285,6 +306,12 @@ def authorize_resource(resource)
285306 end
286307 end
287308
309+ # Override this if you want to contextualize the resource differently.
310+ #
311+ # @param resource A resource to be contextualized.
312+ # @return nothing
313+ def contextualize_resource ( resource ) ; end
314+
288315 def paginate_resources ( resources )
289316 resources . page ( params [ :_page ] ) . per ( records_per_page )
290317 end
0 commit comments