rls_multi_tenant 0.2.1 → 0.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rls_multi_tenant
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.2.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Coding Ways
@@ -9,26 +9,6 @@ bindir: exe
9
9
  cert_chain: []
10
10
  date: 1980-01-02 00:00:00.000000000 Z
11
11
  dependencies:
12
- - !ruby/object:Gem::Dependency
13
- name: rails
14
- requirement: !ruby/object:Gem::Requirement
15
- requirements:
16
- - - ">="
17
- - !ruby/object:Gem::Version
18
- version: '6.0'
19
- - - "<"
20
- - !ruby/object:Gem::Version
21
- version: '9.0'
22
- type: :runtime
23
- prerelease: false
24
- version_requirements: !ruby/object:Gem::Requirement
25
- requirements:
26
- - - ">="
27
- - !ruby/object:Gem::Version
28
- version: '6.0'
29
- - - "<"
30
- - !ruby/object:Gem::Version
31
- version: '9.0'
32
12
  - !ruby/object:Gem::Dependency
33
13
  name: pg
34
14
  requirement: !ruby/object:Gem::Requirement
@@ -50,117 +30,123 @@ dependencies:
50
30
  - !ruby/object:Gem::Version
51
31
  version: '3.0'
52
32
  - !ruby/object:Gem::Dependency
53
- name: ostruct
33
+ name: rails
54
34
  requirement: !ruby/object:Gem::Requirement
55
35
  requirements:
56
36
  - - ">="
57
37
  - !ruby/object:Gem::Version
58
- version: 0.1.0
38
+ version: '6.0'
39
+ - - "<"
40
+ - !ruby/object:Gem::Version
41
+ version: '9.0'
59
42
  type: :runtime
60
43
  prerelease: false
61
44
  version_requirements: !ruby/object:Gem::Requirement
62
45
  requirements:
63
46
  - - ">="
64
47
  - !ruby/object:Gem::Version
65
- version: 0.1.0
48
+ version: '6.0'
49
+ - - "<"
50
+ - !ruby/object:Gem::Version
51
+ version: '9.0'
66
52
  - !ruby/object:Gem::Dependency
67
- name: rspec-rails
53
+ name: bundler-audit
68
54
  requirement: !ruby/object:Gem::Requirement
69
55
  requirements:
70
56
  - - "~>"
71
57
  - !ruby/object:Gem::Version
72
- version: '6.0'
58
+ version: '0.9'
73
59
  type: :development
74
60
  prerelease: false
75
61
  version_requirements: !ruby/object:Gem::Requirement
76
62
  requirements:
77
63
  - - "~>"
78
64
  - !ruby/object:Gem::Version
79
- version: '6.0'
65
+ version: '0.9'
80
66
  - !ruby/object:Gem::Dependency
81
- name: rubocop
67
+ name: generator_spec
82
68
  requirement: !ruby/object:Gem::Requirement
83
69
  requirements:
84
70
  - - "~>"
85
71
  - !ruby/object:Gem::Version
86
- version: '1.50'
72
+ version: '0.9'
87
73
  type: :development
88
74
  prerelease: false
89
75
  version_requirements: !ruby/object:Gem::Requirement
90
76
  requirements:
91
77
  - - "~>"
92
78
  - !ruby/object:Gem::Version
93
- version: '1.50'
79
+ version: '0.9'
94
80
  - !ruby/object:Gem::Dependency
95
- name: rubocop-rails
81
+ name: rspec-rails
96
82
  requirement: !ruby/object:Gem::Requirement
97
83
  requirements:
98
84
  - - "~>"
99
85
  - !ruby/object:Gem::Version
100
- version: '2.20'
86
+ version: 6.1.0
101
87
  type: :development
102
88
  prerelease: false
103
89
  version_requirements: !ruby/object:Gem::Requirement
104
90
  requirements:
105
91
  - - "~>"
106
92
  - !ruby/object:Gem::Version
107
- version: '2.20'
93
+ version: 6.1.0
108
94
  - !ruby/object:Gem::Dependency
109
- name: rubocop-rspec
95
+ name: rubocop
110
96
  requirement: !ruby/object:Gem::Requirement
111
97
  requirements:
112
98
  - - "~>"
113
99
  - !ruby/object:Gem::Version
114
- version: '2.20'
100
+ version: 1.80.0
115
101
  type: :development
116
102
  prerelease: false
117
103
  version_requirements: !ruby/object:Gem::Requirement
118
104
  requirements:
119
105
  - - "~>"
120
106
  - !ruby/object:Gem::Version
121
- version: '2.20'
107
+ version: 1.80.0
122
108
  - !ruby/object:Gem::Dependency
123
- name: simplecov
109
+ name: rubocop-rails
124
110
  requirement: !ruby/object:Gem::Requirement
125
111
  requirements:
126
112
  - - "~>"
127
113
  - !ruby/object:Gem::Version
128
- version: '0.22'
114
+ version: '2.33'
129
115
  type: :development
130
116
  prerelease: false
131
117
  version_requirements: !ruby/object:Gem::Requirement
132
118
  requirements:
133
119
  - - "~>"
134
120
  - !ruby/object:Gem::Version
135
- version: '0.22'
121
+ version: '2.33'
136
122
  - !ruby/object:Gem::Dependency
137
- name: generator_spec
123
+ name: rubocop-rspec
138
124
  requirement: !ruby/object:Gem::Requirement
139
125
  requirements:
140
126
  - - "~>"
141
127
  - !ruby/object:Gem::Version
142
- version: '0.9'
128
+ version: '3.7'
143
129
  type: :development
144
130
  prerelease: false
145
131
  version_requirements: !ruby/object:Gem::Requirement
146
132
  requirements:
147
133
  - - "~>"
148
134
  - !ruby/object:Gem::Version
149
- version: '0.9'
135
+ version: '3.7'
150
136
  - !ruby/object:Gem::Dependency
151
- name: bundler-audit
137
+ name: simplecov
152
138
  requirement: !ruby/object:Gem::Requirement
153
139
  requirements:
154
140
  - - "~>"
155
141
  - !ruby/object:Gem::Version
156
- version: '0.9'
142
+ version: '0.22'
157
143
  type: :development
158
144
  prerelease: false
159
145
  version_requirements: !ruby/object:Gem::Requirement
160
146
  requirements:
161
147
  - - "~>"
162
148
  - !ruby/object:Gem::Version
163
- version: '0.9'
149
+ version: '0.22'
164
150
  description: A comprehensive gem that provides RLS-based multi-tenancy for Rails applications
165
151
  using PostgreSQL, including automatic tenant context switching, security validations,
166
152
  and migration helpers.
@@ -186,11 +172,8 @@ files:
186
172
  - lib/rls_multi_tenant/generators/setup/setup_generator.rb
187
173
  - lib/rls_multi_tenant/generators/setup/templates/tenant_model.rb
188
174
  - lib/rls_multi_tenant/generators/shared/template_helper.rb
189
- - lib/rls_multi_tenant/generators/shared/templates/create_app_user.rb
190
175
  - lib/rls_multi_tenant/generators/shared/templates/create_tenant.rb
191
- - lib/rls_multi_tenant/generators/shared/templates/db_admin.rake
192
176
  - lib/rls_multi_tenant/generators/shared/templates/enable_uuid_extension.rb
193
- - lib/rls_multi_tenant/generators/task/task_generator.rb
194
177
  - lib/rls_multi_tenant/middleware/subdomain_tenant_selector.rb
195
178
  - lib/rls_multi_tenant/railtie.rb
196
179
  - lib/rls_multi_tenant/rls_helper.rb
@@ -207,6 +190,7 @@ metadata:
207
190
  changelog_uri: https://github.com/codingways/rls_multi_tenant/blob/main/CHANGELOG.md
208
191
  bug_tracker_uri: https://github.com/codingways/rls_multi_tenant/issues
209
192
  documentation_uri: https://github.com/codingways/rls_multi_tenant#readme
193
+ rubygems_mfa_required: 'true'
210
194
  rdoc_options: []
211
195
  require_paths:
212
196
  - lib
@@ -1,49 +0,0 @@
1
- class CreateAppUser < ActiveRecord::Migration[<%= Rails.version.to_f %>]
2
- def up
3
- app_user = ENV['<%= RlsMultiTenant.app_user_env_var %>']
4
- app_password = ENV['POSTGRES_APP_PASSWORD']
5
-
6
- # Create user with RLS privileges in PostgreSQL
7
- execute <<-SQL
8
- DO $$
9
- BEGIN
10
- IF NOT EXISTS (SELECT FROM pg_catalog.pg_roles WHERE rolname = '#{app_user}') THEN
11
- CREATE ROLE #{app_user} WITH LOGIN PASSWORD '#{app_password}';
12
- END IF;
13
- END
14
- $$;
15
- SQL
16
-
17
- # Grant basic permissions to the user
18
- execute "GRANT CONNECT ON DATABASE #{ActiveRecord::Base.connection.current_database} TO #{app_user};"
19
- execute "GRANT USAGE ON SCHEMA public TO #{app_user};"
20
- execute "GRANT CREATE ON SCHEMA public TO #{app_user};"
21
-
22
- # Grant default permissions for future tables in public schema
23
- execute "ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO #{app_user};"
24
- execute "ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT USAGE, SELECT ON SEQUENCES TO #{app_user};"
25
-
26
- # Grant permissions on all existing tables
27
- execute "GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO #{app_user};"
28
- execute "GRANT USAGE, SELECT ON ALL SEQUENCES IN SCHEMA public TO #{app_user};"
29
- end
30
-
31
- def down
32
- app_user = ENV['<%= RlsMultiTenant.app_user_env_var %>']
33
-
34
- # Revoke permissions
35
- execute "REVOKE ALL ON SCHEMA public FROM #{app_user};"
36
- execute "REVOKE CONNECT ON DATABASE #{ActiveRecord::Base.connection.current_database} FROM #{app_user};"
37
-
38
- # Revoke permissions from all existing tables and sequences
39
- execute "REVOKE ALL ON ALL TABLES IN SCHEMA public FROM #{app_user};"
40
- execute "REVOKE ALL ON ALL SEQUENCES IN SCHEMA public FROM #{app_user};"
41
-
42
- # Revoke default permissions for future tables in public schema
43
- execute "ALTER DEFAULT PRIVILEGES IN SCHEMA public REVOKE SELECT, INSERT, UPDATE, DELETE ON TABLES FROM #{app_user};"
44
- execute "ALTER DEFAULT PRIVILEGES IN SCHEMA public REVOKE USAGE, SELECT ON SEQUENCES FROM #{app_user};"
45
-
46
- # Drop user
47
- execute "DROP ROLE IF EXISTS #{app_user};"
48
- end
49
- end
@@ -1,27 +0,0 @@
1
- namespace :db_as do
2
- desc "Run a db: task with admin privileges. Usage: `rails db_as:admin[migrate]`"
3
- task :admin, [:sub_task] do |t, args|
4
- sub_task = args[:sub_task]
5
-
6
- # Check if a sub-task was provided
7
- if sub_task.nil? || !Rake::Task.task_defined?("db:#{sub_task}")
8
- puts "Usage: rails db_as:admin[sub_task]"
9
- puts "Valid sub-tasks: #{Rake.application.tasks.map(&:name).select { |name| name.start_with?("db:") }.map { |name| name.split(':', 2).last }.uniq.sort.join(', ')}"
10
- exit
11
- end
12
-
13
- database_url = "postgresql://#{ENV['POSTGRES_USER']}:#{ENV['POSTGRES_PASSWORD']}@#{ENV['POSTGRES_HOST']}:5432/#{ENV['POSTGRES_DB']}"
14
-
15
- # Set the DATABASE_URL with admin user details.
16
- ENV['DATABASE_URL'] = database_url
17
- ENV['CACHE_DATABASE_URL'] = "#{database_url}_cache"
18
- ENV['QUEUE_DATABASE_URL'] = "#{database_url}_queue"
19
- ENV['CABLE_DATABASE_URL'] = "#{database_url}_cable"
20
-
21
- # Set a flag to indicate we're running with admin privileges
22
- ENV['RLS_MULTI_TENANT_ADMIN_MODE'] = 'true'
23
-
24
- puts "Executing db:#{sub_task} with admin privileges..."
25
- Rake::Task["db:#{sub_task}"].invoke
26
- end
27
- end
@@ -1,34 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails/generators'
4
- require 'rls_multi_tenant/generators/shared/template_helper'
5
-
6
- module RlsMultiTenant
7
- module Generators
8
- class TaskGenerator < Rails::Generators::Base
9
- include Shared::TemplateHelper
10
-
11
- source_root File.expand_path("templates", __dir__)
12
-
13
- desc "Generate RLS Multi-tenant rake tasks"
14
-
15
- def create_db_admin_task
16
- copy_shared_template "db_admin.rake", "lib/tasks/db_admin.rake"
17
- show_instructions
18
- end
19
-
20
- def show_instructions
21
- say "\n" + "="*60, :green
22
- say "RLS Multi-tenant rake tasks created successfully!", :green
23
- say "="*60, :green
24
- say "\nWhat was created:", :yellow
25
- say "1. lib/tasks/db_admin.rake - Database admin tasks", :yellow
26
- say "\nUsage:", :yellow
27
- say "rails db_as:admin[migrate] # Run migrations with admin privileges", :yellow
28
- say "rails db_as:admin[seed] # Run seeds with admin privileges", :yellow
29
- say "\nNote: This is required because the app user doesn't have migration privileges", :yellow
30
- say "="*60, :green
31
- end
32
- end
33
- end
34
- end