multi-tenant-support 1.0.5 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1519c4812629d4b3e66708ab8aaffca8925fe23cc75924e55d57a010dbd71022
4
- data.tar.gz: 8de09d069ac3d0cb813b513fd77948e481682d4cef114f6054ab9c6089ea0df1
3
+ metadata.gz: d7761ff1721fab8904557ae7af54aca1875d19fb6076bbe5038493c945009eec
4
+ data.tar.gz: 43df41f9e15014829828918d4703e77fe6f321bad2f10495e103860abe57cbbf
5
5
  SHA512:
6
- metadata.gz: 1dd7e70f8992e1bb9675e0e5dc4136a6395012b241eab4b022db02e3066d092449af6b69bd6532190d9c40de419d6784f3620c9b193bdbf3372f25ec32d11cc1
7
- data.tar.gz: 1f5ab147795036d550935a3a12ba301a8c54905a3b61b154580401dbd1b9d832edc799ceeaa20d38eecea2086ccc6ccd36d65c6997e88ba6fe2fc8ef41d7a9ca
6
+ metadata.gz: 7103aec88b69d628baed7e783495cc5e06b8fe49f5751d40aa5e676f2586aa7a0fcfe4d4f6015bfa4409017e533a3fff3a71b945d5426feb2ba5d7ba177f1ede
7
+ data.tar.gz: f2e5c63298eee511690622da0d0c47bf0fcdeb80aff543704da2a2a7a047165d5d6eebfda3d44862003329fcc739a3d8278d3ffb7616667087d540c7f9e49006
data/README.md CHANGED
@@ -11,7 +11,7 @@ Keep your data secure with multi-tenant-support. Prevent most ActiveRecord CRUD
11
11
  - Prevent most ActiveRecord CRUD methods from acting across tenants.
12
12
  - Support Row-level Multitenancy
13
13
  - Build on ActiveSupport::CurrentAttributes offered by rails
14
- - Auto set current tenant through subdomain and domain in controller
14
+ - Auto set current tenant through subdomain and domain in controller (overrideable)
15
15
  - Support ActiveJob and Sidekiq
16
16
 
17
17
 
@@ -219,7 +219,7 @@ Below are the behaviour of all ActiveRecord CRUD methods under abvove scenarios:
219
219
 
220
220
  ## Usage
221
221
 
222
- #### Get current
222
+ ### Get current
223
223
 
224
224
  Get current tenant through:
225
225
 
@@ -227,7 +227,7 @@ Get current tenant through:
227
227
  MultiTenantSupport.current_tenant
228
228
  ```
229
229
 
230
- #### Switch tenant
230
+ ### Switch tenant
231
231
 
232
232
  You can switch to another tenant temporary through:
233
233
 
@@ -237,7 +237,7 @@ MultiTenantSupport.under_tenant amazon do
237
237
  end
238
238
  ```
239
239
 
240
- #### Disallow read across tenant by default
240
+ ### Disallow read across tenant by default
241
241
 
242
242
  This gem disallow read across tenant by default. You can check current state through:
243
243
 
@@ -245,7 +245,7 @@ This gem disallow read across tenant by default. You can check current state thr
245
245
  MultiTenantSupport.disallow_read_across_tenant?
246
246
  ```
247
247
 
248
- #### Allow read across tenant for super admin
248
+ ### Allow read across tenant for super admin
249
249
 
250
250
  You can turn on the permission to read records across tenant through:
251
251
 
@@ -260,7 +260,7 @@ end
260
260
 
261
261
  You can put it in a before action in SuperAdmin's controllers
262
262
 
263
- #### Disallow modify records tenant
263
+ ### Disallow modify records tenant
264
264
 
265
265
  This gem disallow modify record across tenant no matter you are super admin or not.
266
266
 
@@ -274,23 +274,41 @@ If `MultiTenantSupport.current_tenant` exist, you can only modify those records
274
274
 
275
275
  If `MultiTenantSupport.current_tenant` is missing, you cannot modify or create any tenanted records.
276
276
 
277
- #### Set current tenant acccount in controller by default
277
+ ### Set current tenant acccount in controller by default
278
278
 
279
279
  This gem has set a before action `set_current_tenant_account` on ActionController. It search tenant by subdomain or domain. Do remember to `skip_before_action :set_current_tenant_account` in super admin controllers.
280
280
 
281
281
  Feel free to override it, if the finder behaviour is not what you want.
282
282
 
283
- #### upsert_all
283
+ ### Override current tenant finder method if domain/subdomain is not the way you want
284
+
285
+ You can override `find_current_tenant_account` in any controller with your own tenant finding strategy. Just make sure this method return the tenat account record or nil.
286
+
287
+ For example, say you only want to find tenant with domain not subdomain. It's very simple:
288
+
289
+ ```ruby
290
+ class ApplicationController < ActionController::Base
291
+ private
292
+
293
+ def find_current_tenant_account
294
+ Account.find_by(domain: request.domain)
295
+ end
296
+ end
297
+ ```
298
+
299
+ Then your tenant finding strategy has changed from domain/subdomain to domain only.
300
+
301
+ ### upsert_all
284
302
 
285
303
  Currently, we don't have a good way to protect this method. So please use `upser_all` carefully.
286
304
 
287
- #### Unscoped
305
+ ### Unscoped
288
306
 
289
307
  This gem has override `unscoped` to prevent the default tenant scope be scoped out. But if you really want to scope out the default tenant scope, you can use `unscope_tenant`.
290
308
 
291
309
  ## Code Example
292
310
 
293
- #### Database Schema
311
+ ### Database Schema
294
312
 
295
313
  ```ruby
296
314
  create_table "accounts", force: :cascade do |t|
@@ -15,12 +15,17 @@ module MultiTenantSupport
15
15
  end
16
16
 
17
17
  def set_current_tenant_account
18
- tenant_account = MultiTenantSupport::FindTenantAccount.call(
18
+ tenant_account = find_current_tenant_account
19
+ MultiTenantSupport::Current.tenant_account = tenant_account
20
+ instance_variable_set("@#{MultiTenantSupport.current_tenant_account_method}", tenant_account)
21
+ end
22
+
23
+ # A user can override this method, if he need a customize way
24
+ def find_current_tenant_account
25
+ MultiTenantSupport::FindTenantAccount.call(
19
26
  subdomains: request.subdomains,
20
27
  domain: request.domain
21
28
  )
22
- MultiTenantSupport::Current.tenant_account = tenant_account
23
- instance_variable_set("@#{MultiTenantSupport.current_tenant_account_method}", tenant_account)
24
29
  end
25
30
  end
26
31
  end
@@ -1,3 +1,3 @@
1
1
  module MultiTenantSupport
2
- VERSION = '1.0.5'
2
+ VERSION = '1.1.0'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: multi-tenant-support
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.5
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Hopper Gee