@@ -18,7 +18,7 @@ def belongs_to_tenant(name, **options)
1818
1919 def set_default_scope_under_current_tenant ( foreign_key )
2020 default_scope lambda {
21- if MultiTenantSupport . disallow_read_across_tenant? || MultiTenantSupport . current_tenant
21+ if MultiTenantSupport . full_protected?
2222 scope_under_current_tenant
2323 else
2424 where ( nil )
@@ -37,7 +37,7 @@ def set_default_scope_under_current_tenant(foreign_key)
3737
3838 override_unscoped = Module . new {
3939 define_method :unscoped do |&block |
40- if MultiTenantSupport . disallow_read_across_tenant? || MultiTenantSupport . current_tenant
40+ if MultiTenantSupport . full_protected?
4141 block ? relation . scope_under_current_tenant . scoping { block . call } : relation . scope_under_current_tenant
4242 else
4343 super ( &block )
@@ -48,13 +48,13 @@ def set_default_scope_under_current_tenant(foreign_key)
4848
4949 override_insert_all = Module . new {
5050 define_method :insert_all do |attributes , **arguments |
51- raise MissingTenantError unless MultiTenantSupport . current_tenant
51+ raise MissingTenantError unless MultiTenantSupport . unprotected? || MultiTenantSupport . current_tenant
5252
5353 super ( attributes , **arguments )
5454 end
5555
5656 define_method :insert_all! do |attributes , **arguments |
57- raise MissingTenantError unless MultiTenantSupport . current_tenant
57+ raise MissingTenantError unless MultiTenantSupport . unprotected? || MultiTenantSupport . current_tenant
5858
5959 super ( attributes , **arguments )
6060 end
@@ -63,50 +63,49 @@ def set_default_scope_under_current_tenant(foreign_key)
6363
6464 override_upsert_all = Module . new {
6565 define_method :upsert_all do |attributes , **arguments |
66- warn "[WARNING] You are using upsert_all(or upsert) which may update records across tenants"
66+ warn "[WARNING] You are using upsert_all(or upsert) which may update records across tenants" unless MultiTenantSupport . unprotected?
6767
6868 super ( attributes , **arguments )
6969 end
7070 }
7171 extend override_upsert_all
7272
7373 after_initialize do |object |
74- if MultiTenantSupport . disallow_read_across_tenant? || object . new_record?
75- raise MissingTenantError unless MultiTenantSupport . current_tenant
76- raise InvalidTenantAccess if object . send ( foreign_key ) != MultiTenantSupport . current_tenant_id
77- end
74+ next if object . new_record? && MultiTenantSupport . unprotected?
75+ next if object . persisted? && MultiTenantSupport . allow_read_across_tenant?
76+
77+ raise MissingTenantError unless MultiTenantSupport . current_tenant
78+ raise InvalidTenantAccess if object . send ( foreign_key ) != MultiTenantSupport . current_tenant_id
7879 end
7980
8081 before_save do |object |
82+ next if MultiTenantSupport . unprotected?
83+
8184 raise MissingTenantError unless MultiTenantSupport . current_tenant
8285 raise NilTenantError if object . send ( foreign_key ) . nil?
8386 raise InvalidTenantAccess if object . send ( foreign_key ) != MultiTenantSupport . current_tenant_id
8487 end
8588
8689 override_update_columns_module = Module . new {
8790 define_method :update_columns do |attributes |
88- raise MissingTenantError unless MultiTenantSupport . current_tenant
89- raise NilTenantError if send ( foreign_key ) . nil?
90- raise InvalidTenantAccess if send ( foreign_key ) != MultiTenantSupport . current_tenant_id
91+ unless MultiTenantSupport . unprotected?
92+ raise MissingTenantError unless MultiTenantSupport . current_tenant
93+ raise NilTenantError if send ( foreign_key ) . nil?
94+ raise InvalidTenantAccess if send ( foreign_key ) != MultiTenantSupport . current_tenant_id
95+ end
9196
9297 super ( attributes )
9398 end
94-
95- define_method :update_column do |name , value |
96- raise MissingTenantError unless MultiTenantSupport . current_tenant
97- raise NilTenantError if send ( foreign_key ) . nil?
98- raise InvalidTenantAccess if send ( foreign_key ) != MultiTenantSupport . current_tenant_id
99-
100- super ( name , value )
101- end
10299 }
103100
104101 include override_update_columns_module
105102
106103 override_delete = Module . new {
107104 define_method :delete do
108- raise MissingTenantError unless MultiTenantSupport . current_tenant
109- raise InvalidTenantAccess if send ( foreign_key ) != MultiTenantSupport . current_tenant_id
105+ unless MultiTenantSupport . unprotected?
106+ raise MissingTenantError unless MultiTenantSupport . current_tenant
107+ raise InvalidTenantAccess if send ( foreign_key ) != MultiTenantSupport . current_tenant_id
108+ end
110109
111110 super ( )
112111 end
@@ -115,26 +114,33 @@ def set_default_scope_under_current_tenant(foreign_key)
115114
116115 override_delete_by = Module . new {
117116 define_method :delete_by do |*args |
118- raise MissingTenantError unless MultiTenantSupport . current_tenant
117+ unless MultiTenantSupport . unprotected?
118+ raise MissingTenantError unless MultiTenantSupport . current_tenant
119+ end
119120
120121 super ( *args )
121122 end
122123 }
123124 extend override_delete_by
124125
125126 before_destroy do |object |
126- raise MissingTenantError unless MultiTenantSupport . current_tenant
127- raise InvalidTenantAccess if object . send ( foreign_key ) != MultiTenantSupport . current_tenant_id
127+ unless MultiTenantSupport . unprotected?
128+ raise MissingTenantError unless MultiTenantSupport . current_tenant
129+ raise InvalidTenantAccess if object . send ( foreign_key ) != MultiTenantSupport . current_tenant_id
130+ end
128131 end
129132 end
130133
131134 def set_tenant_account_readonly ( tenant_name , foreign_key )
132135 readonly_tenant_module = Module . new {
133136
134137 define_method "#{ tenant_name } =" do |tenant |
138+ return super ( tenant_account ) if MultiTenantSupport . unprotected?
139+
135140 raise NilTenantError if tenant . nil?
136141 raise MissingTenantError unless MultiTenantSupport . current_tenant
137142
143+
138144 if new_record? && tenant == MultiTenantSupport . current_tenant
139145 super tenant
140146 else
@@ -143,6 +149,8 @@ def set_tenant_account_readonly(tenant_name, foreign_key)
143149 end
144150
145151 define_method "#{ foreign_key } =" do |key |
152+ return super ( tenant_account ) if MultiTenantSupport . unprotected?
153+
146154 raise NilTenantError if key . nil?
147155 raise MissingTenantError unless MultiTenantSupport . current_tenant
148156
@@ -170,9 +178,11 @@ def set_tenant_account_readonly(tenant_name, foreign_key)
170178
171179 override_delete_all = Module . new {
172180 define_method :delete_all do
173- current_tenant_exist = MultiTenantSupport . current_tenant
174- is_global_model = !MultiTenantSupport . model . tenanted_models . include? ( klass . name )
175- raise MultiTenantSupport ::MissingTenantError unless current_tenant_exist || is_global_model
181+ unless MultiTenantSupport . unprotected?
182+ current_tenant_exist = MultiTenantSupport . current_tenant
183+ is_global_model = !MultiTenantSupport . model . tenanted_models . include? ( klass . name )
184+ raise MultiTenantSupport ::MissingTenantError unless current_tenant_exist || is_global_model
185+ end
176186
177187 super ( )
178188 end
@@ -181,9 +191,11 @@ def set_tenant_account_readonly(tenant_name, foreign_key)
181191
182192 override_update_all = Module . new {
183193 define_method :update_all do |updates |
184- current_tenant_exist = MultiTenantSupport . current_tenant
185- is_global_model = !MultiTenantSupport . model . tenanted_models . include? ( klass . name )
186- raise MultiTenantSupport ::MissingTenantError unless current_tenant_exist || is_global_model
194+ unless MultiTenantSupport . unprotected?
195+ current_tenant_exist = MultiTenantSupport . current_tenant
196+ is_global_model = !MultiTenantSupport . model . tenanted_models . include? ( klass . name )
197+ raise MultiTenantSupport ::MissingTenantError unless current_tenant_exist || is_global_model
198+ end
187199
188200 super ( updates )
189201 end
0 commit comments