rails_iam 0.1.0

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.
Files changed (69) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +23 -0
  3. data/CONTRIBUTING.md +145 -0
  4. data/LICENSE +20 -0
  5. data/README.md +192 -0
  6. data/Rakefile +14 -0
  7. data/app/controllers/concerns/rails_iam/auth_concern.rb +60 -0
  8. data/app/controllers/concerns/rails_iam/authentication/authenticatable.rb +44 -0
  9. data/app/controllers/concerns/rails_iam/authorization/authorizable.rb +170 -0
  10. data/app/controllers/rails_iam/application_controller.rb +7 -0
  11. data/app/controllers/rails_iam/auth_controller.rb +113 -0
  12. data/app/helpers/rails_iam/config_loader.rb +71 -0
  13. data/app/models/concerns/rails_iam/auditable.rb +57 -0
  14. data/app/models/concerns/rails_iam/user_concern.rb +59 -0
  15. data/app/models/rails_iam/application_record.rb +8 -0
  16. data/app/models/rails_iam/permission.rb +14 -0
  17. data/app/models/rails_iam/refresh_token.rb +7 -0
  18. data/app/models/rails_iam/role.rb +14 -0
  19. data/app/models/rails_iam/role_permission.rb +20 -0
  20. data/app/models/rails_iam/user.rb +16 -0
  21. data/app/models/rails_iam/user_denied_permission.rb +12 -0
  22. data/app/models/rails_iam/user_permission.rb +12 -0
  23. data/app/models/rails_iam/user_role.rb +12 -0
  24. data/app/services/application_service.rb +4 -0
  25. data/app/services/rails_iam/authentication/authenticated_user.rb +13 -0
  26. data/app/services/rails_iam/authentication/authenticator.rb +39 -0
  27. data/app/services/rails_iam/authentication/current.rb +9 -0
  28. data/app/services/rails_iam/authentication/exceptions/authentication_error.rb +10 -0
  29. data/app/services/rails_iam/authentication/jwt_decoder.rb +38 -0
  30. data/app/services/rails_iam/authentication/jwt_encoder.rb +45 -0
  31. data/app/services/rails_iam/authentication/login.rb +67 -0
  32. data/app/services/rails_iam/authentication/logout.rb +35 -0
  33. data/app/services/rails_iam/authentication/refresh_token_encoder.rb +11 -0
  34. data/app/services/rails_iam/authentication/skip_authentication_rule.rb +20 -0
  35. data/app/services/rails_iam/authentication/token_extractor.rb +64 -0
  36. data/app/services/rails_iam/authorization/authorization_context.rb +41 -0
  37. data/app/services/rails_iam/authorization/authorization_rule.rb +38 -0
  38. data/app/services/rails_iam/authorization/authorizer.rb +35 -0
  39. data/app/services/rails_iam/authorization/cache.rb +39 -0
  40. data/app/services/rails_iam/authorization/denied_permission_checker.rb +33 -0
  41. data/app/services/rails_iam/authorization/exceptions/authorization_error.rb +10 -0
  42. data/app/services/rails_iam/authorization/exceptions/missing_permission_error.rb +35 -0
  43. data/app/services/rails_iam/authorization/exceptions/missing_role_error.rb +35 -0
  44. data/app/services/rails_iam/authorization/permission_checker.rb +42 -0
  45. data/app/services/rails_iam/authorization/permission_resolver.rb +70 -0
  46. data/app/services/rails_iam/authorization/permission_sources/role_permission_source.rb +37 -0
  47. data/app/services/rails_iam/authorization/permission_sources/user_denied_permission_source.rb +29 -0
  48. data/app/services/rails_iam/authorization/permission_sources/user_permission_source.rb +28 -0
  49. data/app/services/rails_iam/authorization/resolved_permissions.rb +63 -0
  50. data/app/services/rails_iam/authorization/role_checker.rb +35 -0
  51. data/app/services/rails_iam/authorization/role_resolver.rb +30 -0
  52. data/app/services/rails_iam/authorization/skip_authorization_rule.rb +19 -0
  53. data/app/services/rails_iam/rails_iam_service.rb +11 -0
  54. data/config/routes.rb +25 -0
  55. data/lib/generators/rails_iam/install_generator.rb +49 -0
  56. data/lib/generators/rails_iam/templates/create_rails_iam_tables.rb.erb +119 -0
  57. data/lib/generators/rails_iam/templates/initializer.rb +162 -0
  58. data/lib/rails_iam/config/authentication.rb +65 -0
  59. data/lib/rails_iam/config/authorization.rb +36 -0
  60. data/lib/rails_iam/config/jwt.rb +27 -0
  61. data/lib/rails_iam/configuration.rb +30 -0
  62. data/lib/rails_iam/controller_dsl.rb +41 -0
  63. data/lib/rails_iam/engine.rb +34 -0
  64. data/lib/rails_iam/model_dsl.rb +13 -0
  65. data/lib/rails_iam/version.rb +5 -0
  66. data/lib/rails_iam.rb +27 -0
  67. data/lib/tasks/rails_iam_tasks.rake +6 -0
  68. data/rails_iam.gemspec +46 -0
  69. metadata +161 -0
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RailsIam
4
+ class Engine < ::Rails::Engine
5
+ isolate_namespace RailsIam
6
+
7
+ config.generators do |g|
8
+ g.test_framework :rspec
9
+ g.fixture_replacement :factory_bot
10
+ end
11
+
12
+ initializer "rails_iam.cookies" do |app|
13
+ next unless RailsIam.configuration.authentication.authentication_strategies.include?(:cookie)
14
+
15
+ app.middleware.use(ActionDispatch::Cookies)
16
+ end
17
+
18
+ initializer "rails_iam.controller_dsl" do
19
+ ActiveSupport.on_load(:action_controller_base) do
20
+ include RailsIam::ControllerDsl
21
+ end
22
+
23
+ ActiveSupport.on_load(:action_controller_api) do
24
+ include RailsIam::ControllerDsl
25
+ end
26
+ end
27
+
28
+ initializer "rails_iam.model_dsl" do
29
+ ActiveSupport.on_load(:active_record) do
30
+ include RailsIam::ModelDsl
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RailsIam
4
+ module ModelDsl
5
+ extend ActiveSupport::Concern
6
+
7
+ class_methods do
8
+ def acts_as_rails_iam_user
9
+ include RailsIam::UserConcern
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RailsIam
4
+ VERSION = "0.1.0"
5
+ end
data/lib/rails_iam.rb ADDED
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "rails_iam/version"
4
+ require "jwt"
5
+ require "bcrypt"
6
+ require "rails_iam/configuration"
7
+ require "rails_iam/config/authorization"
8
+ require "rails_iam/config/jwt"
9
+ require "rails_iam/config/authentication"
10
+
11
+ require "rails_iam/controller_dsl"
12
+ require "rails_iam/model_dsl"
13
+
14
+ require "rails_iam/engine"
15
+ module RailsIam
16
+ class << self
17
+ attr_writer :configuration
18
+
19
+ def configuration
20
+ @configuration ||= Configuration.new
21
+ end
22
+
23
+ def configure
24
+ yield(configuration)
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ # desc "Explaining what the task does"
4
+ # task :rails_iam do
5
+ # # Task goes here
6
+ # end
data/rails_iam.gemspec ADDED
@@ -0,0 +1,46 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "lib/rails_iam/version"
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = "rails_iam"
7
+ spec.version = RailsIam::VERSION
8
+ spec.authors = ["Salman Mahmud"]
9
+ spec.email = ["salmanmahmud2014@gmail.com"]
10
+ spec.homepage = "https://github.com/salmanx/rails_iam"
11
+ spec.summary = "Authentication, authorization, RBAC, PBAC and IAM for Ruby on Rails."
12
+ spec.description = <<~DESCRIPTION
13
+ Rails IAM is a database-driven Identity and Access Management (IAM) engine
14
+ for Rails applications. It provides JWT authentication, refresh tokens,
15
+ role-based access control (RBAC), permission-based access control (PBAC),
16
+ endpoint-first authorization, role and user permissions, explicit denied
17
+ permissions, authorization caching, and automatic resource authorization
18
+ for API and traditional Rails applications.
19
+ DESCRIPTION
20
+
21
+ spec.license = "MIT"
22
+ spec.metadata["homepage_uri"] = spec.homepage
23
+ spec.metadata["source_code_uri"] = "https://github.com/salmanx/rails_iam"
24
+ spec.metadata["documentation_uri"] = "https://github.com/salmanx/rails_iam/wiki"
25
+ spec.metadata["changelog_uri"] =
26
+ "https://github.com/salmanx/rails_iam/releases"
27
+ spec.metadata["bug_tracker_uri"] = "https://github.com/salmanx/rails_iam/issues"
28
+ spec.metadata["rubygems_mfa_required"] = "true"
29
+ spec.files = Dir.chdir(__dir__) do
30
+ Dir[
31
+ "{app,config,db,lib}/**/*",
32
+ "README.md",
33
+ "LICENSE",
34
+ "CHANGELOG.md",
35
+ "CONTRIBUTING.md",
36
+ "*.gemspec",
37
+ "Rakefile",
38
+ ]
39
+ end
40
+
41
+ spec.require_paths = ["lib"]
42
+ spec.required_ruby_version = ">= 2.7.0"
43
+ spec.add_dependency "bcrypt", "~> 3.1"
44
+ spec.add_dependency "jwt", "~> 2.7"
45
+ spec.add_dependency "rails", ">= 7.0"
46
+ end
metadata ADDED
@@ -0,0 +1,161 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rails_iam
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Salman Mahmud
8
+ bindir: bin
9
+ cert_chain: []
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
+ dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: bcrypt
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - "~>"
17
+ - !ruby/object:Gem::Version
18
+ version: '3.1'
19
+ type: :runtime
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - "~>"
24
+ - !ruby/object:Gem::Version
25
+ version: '3.1'
26
+ - !ruby/object:Gem::Dependency
27
+ name: jwt
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - "~>"
31
+ - !ruby/object:Gem::Version
32
+ version: '2.7'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '2.7'
40
+ - !ruby/object:Gem::Dependency
41
+ name: rails
42
+ requirement: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: '7.0'
47
+ type: :runtime
48
+ prerelease: false
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: '7.0'
54
+ description: |
55
+ Rails IAM is a database-driven Identity and Access Management (IAM) engine
56
+ for Rails applications. It provides JWT authentication, refresh tokens,
57
+ role-based access control (RBAC), permission-based access control (PBAC),
58
+ endpoint-first authorization, role and user permissions, explicit denied
59
+ permissions, authorization caching, and automatic resource authorization
60
+ for API and traditional Rails applications.
61
+ email:
62
+ - salmanmahmud2014@gmail.com
63
+ executables: []
64
+ extensions: []
65
+ extra_rdoc_files: []
66
+ files:
67
+ - CHANGELOG.md
68
+ - CONTRIBUTING.md
69
+ - LICENSE
70
+ - README.md
71
+ - Rakefile
72
+ - app/controllers/concerns/rails_iam/auth_concern.rb
73
+ - app/controllers/concerns/rails_iam/authentication/authenticatable.rb
74
+ - app/controllers/concerns/rails_iam/authorization/authorizable.rb
75
+ - app/controllers/rails_iam/application_controller.rb
76
+ - app/controllers/rails_iam/auth_controller.rb
77
+ - app/helpers/rails_iam/config_loader.rb
78
+ - app/models/concerns/rails_iam/auditable.rb
79
+ - app/models/concerns/rails_iam/user_concern.rb
80
+ - app/models/rails_iam/application_record.rb
81
+ - app/models/rails_iam/permission.rb
82
+ - app/models/rails_iam/refresh_token.rb
83
+ - app/models/rails_iam/role.rb
84
+ - app/models/rails_iam/role_permission.rb
85
+ - app/models/rails_iam/user.rb
86
+ - app/models/rails_iam/user_denied_permission.rb
87
+ - app/models/rails_iam/user_permission.rb
88
+ - app/models/rails_iam/user_role.rb
89
+ - app/services/application_service.rb
90
+ - app/services/rails_iam/authentication/authenticated_user.rb
91
+ - app/services/rails_iam/authentication/authenticator.rb
92
+ - app/services/rails_iam/authentication/current.rb
93
+ - app/services/rails_iam/authentication/exceptions/authentication_error.rb
94
+ - app/services/rails_iam/authentication/jwt_decoder.rb
95
+ - app/services/rails_iam/authentication/jwt_encoder.rb
96
+ - app/services/rails_iam/authentication/login.rb
97
+ - app/services/rails_iam/authentication/logout.rb
98
+ - app/services/rails_iam/authentication/refresh_token_encoder.rb
99
+ - app/services/rails_iam/authentication/skip_authentication_rule.rb
100
+ - app/services/rails_iam/authentication/token_extractor.rb
101
+ - app/services/rails_iam/authorization/authorization_context.rb
102
+ - app/services/rails_iam/authorization/authorization_rule.rb
103
+ - app/services/rails_iam/authorization/authorizer.rb
104
+ - app/services/rails_iam/authorization/cache.rb
105
+ - app/services/rails_iam/authorization/denied_permission_checker.rb
106
+ - app/services/rails_iam/authorization/exceptions/authorization_error.rb
107
+ - app/services/rails_iam/authorization/exceptions/missing_permission_error.rb
108
+ - app/services/rails_iam/authorization/exceptions/missing_role_error.rb
109
+ - app/services/rails_iam/authorization/permission_checker.rb
110
+ - app/services/rails_iam/authorization/permission_resolver.rb
111
+ - app/services/rails_iam/authorization/permission_sources/role_permission_source.rb
112
+ - app/services/rails_iam/authorization/permission_sources/user_denied_permission_source.rb
113
+ - app/services/rails_iam/authorization/permission_sources/user_permission_source.rb
114
+ - app/services/rails_iam/authorization/resolved_permissions.rb
115
+ - app/services/rails_iam/authorization/role_checker.rb
116
+ - app/services/rails_iam/authorization/role_resolver.rb
117
+ - app/services/rails_iam/authorization/skip_authorization_rule.rb
118
+ - app/services/rails_iam/rails_iam_service.rb
119
+ - config/routes.rb
120
+ - lib/generators/rails_iam/install_generator.rb
121
+ - lib/generators/rails_iam/templates/create_rails_iam_tables.rb.erb
122
+ - lib/generators/rails_iam/templates/initializer.rb
123
+ - lib/rails_iam.rb
124
+ - lib/rails_iam/config/authentication.rb
125
+ - lib/rails_iam/config/authorization.rb
126
+ - lib/rails_iam/config/jwt.rb
127
+ - lib/rails_iam/configuration.rb
128
+ - lib/rails_iam/controller_dsl.rb
129
+ - lib/rails_iam/engine.rb
130
+ - lib/rails_iam/model_dsl.rb
131
+ - lib/rails_iam/version.rb
132
+ - lib/tasks/rails_iam_tasks.rake
133
+ - rails_iam.gemspec
134
+ homepage: https://github.com/salmanx/rails_iam
135
+ licenses:
136
+ - MIT
137
+ metadata:
138
+ homepage_uri: https://github.com/salmanx/rails_iam
139
+ source_code_uri: https://github.com/salmanx/rails_iam
140
+ documentation_uri: https://github.com/salmanx/rails_iam/wiki
141
+ changelog_uri: https://github.com/salmanx/rails_iam/releases
142
+ bug_tracker_uri: https://github.com/salmanx/rails_iam/issues
143
+ rubygems_mfa_required: 'true'
144
+ rdoc_options: []
145
+ require_paths:
146
+ - lib
147
+ required_ruby_version: !ruby/object:Gem::Requirement
148
+ requirements:
149
+ - - ">="
150
+ - !ruby/object:Gem::Version
151
+ version: 2.7.0
152
+ required_rubygems_version: !ruby/object:Gem::Requirement
153
+ requirements:
154
+ - - ">="
155
+ - !ruby/object:Gem::Version
156
+ version: '0'
157
+ requirements: []
158
+ rubygems_version: 3.6.8
159
+ specification_version: 4
160
+ summary: Authentication, authorization, RBAC, PBAC and IAM for Ruby on Rails.
161
+ test_files: []