yes-auth 1.3.0 → 2.2.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b55d0e7c3a35defc7b58ebf46d159eab04a6a02174815c32d5018d69bfdb919a
4
- data.tar.gz: e7a53f73a14be0931b6095d0a18133fd0ec2cb1383b85e2e761d54ca6f692417
3
+ metadata.gz: f82bf0d2cfe44a9db4cbb50d00bdb688ef59e6d0dc0bb0602bc26c4c7f54821e
4
+ data.tar.gz: b5d1bbdd8994ecd3417f3125dd6bf32130a7947b5167b414201f0da4d4974214
5
5
  SHA512:
6
- metadata.gz: 76c9f484431fb793846f91e1fc330eee3040e4e221f00e7d2e98deb69a8fc978aa0bc82021e5f0a1979d4893f3a7cbf2bd895225a6fef2eeb442789528a485ba
7
- data.tar.gz: 2e56a30c5e6345c3b245b1864dfd2083daa9576e4a6de546054a3341d2ae6e8e88b3e7df825130a2f88586aa6fdf55a19f6dc5956a0b3760383db16e6f9a80fe
6
+ metadata.gz: f78cd81ef54c5ca5d467cf888fdea42579c605e86c2b0239203f586d1cff47ce38fda1b207f7dce908041bed137043f3c5893c352f54d76e6c5ba3779d2f0349
7
+ data.tar.gz: cbabfbdeb1afefccebe6f6d9a9f04411b3f0a22bef458ea45b82f884fade8b55466e179573b8d609e85144bb186dcafdb4d93972036d7970a4950908e72c263f
data/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # Changelog
2
2
 
3
+ ## [2.2.0] - 2026-09-01
4
+
5
+ - See root CHANGELOG.md for details.
6
+
7
+ ## [1.4.0] - 2026-06-24
8
+
9
+ - See root CHANGELOG.md for details.
10
+
11
+ ## [1.3.1] - 2026-06-16
12
+
13
+ - See root CHANGELOG.md for details.
14
+
3
15
  ## [1.3.0] - 2026-05-18
4
16
 
5
17
  - See root CHANGELOG.md for details.
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Yes
4
+ module Auth
5
+ module ReadModels
6
+ module Principals
7
+ module ReadResourceAccess
8
+ # Rebuilds the mirror row after the aggregate was restored.
9
+ #
10
+ # The row was hard-deleted by {OnReadResourceAccessRemoved}; the
11
+ # builder recreates it blank during read-model resolution, and the
12
+ # stream replay fills the attributes back in (see {RestoreReplay}).
13
+ class OnReadResourceAccessRestored < Yes::Core::ReadModel::EventHandler
14
+ # @param event [Yes::Core::Event]
15
+ # @return [void]
16
+ def call(_event)
17
+ RestoreReplay.new(builder: Builder.new, stream_name: 'ReadResourceAccess').call(read_model)
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,46 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Yes
4
+ module Auth
5
+ module ReadModels
6
+ module Principals
7
+ # Rebuilds a hard-deleted principals mirror row after an
8
+ # `Authorization::...Restored` event.
9
+ #
10
+ # The `On...Removed` handlers delete mirror rows, and `Restored`
11
+ # events carry no state snapshot. The aggregate's stream is replayed
12
+ # through the builder's regular per-field event handlers to
13
+ # reconstruct the row instead. Lifecycle events are excluded from the
14
+ # replay: a `Removed` would delete (and freeze) the row mid-replay,
15
+ # a `Restored` would recurse.
16
+ class RestoreReplay
17
+ CONTEXT = 'Authorization'
18
+ LIFECYCLE_EVENT_TYPES = /(?:Removed|Restored)\z/
19
+
20
+ # @param builder [Yes::Core::ReadModel::Builder] builder whose handlers replay the events
21
+ # @param stream_name [String] aggregate stream name, e.g. 'WriteResourceAccess'
22
+ def initialize(builder:, stream_name:)
23
+ @builder = builder
24
+ @stream_name = stream_name
25
+ end
26
+
27
+ # @param read_model [ActiveRecord::Base] the freshly (re)created mirror row
28
+ # @param eventstore [PgEventstore::Client]
29
+ # @return [void]
30
+ def call(read_model, eventstore: PgEventstore.client)
31
+ stream = PgEventstore::Stream.new(
32
+ context: CONTEXT, stream_name: @stream_name, stream_id: read_model.id
33
+ )
34
+ eventstore.read_paginated(stream, options: { resolve_link_tos: true }).each do |events|
35
+ events.each do |event|
36
+ next if event.type.match?(LIFECYCLE_EVENT_TYPES)
37
+
38
+ @builder.call(event, read_model:)
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Yes
4
+ module Auth
5
+ module ReadModels
6
+ module Principals
7
+ module WriteResourceAccess
8
+ # Rebuilds the mirror row after the aggregate was restored.
9
+ #
10
+ # The row was hard-deleted by {OnWriteResourceAccessRemoved}; the
11
+ # builder recreates it blank during read-model resolution, and the
12
+ # stream replay fills the attributes back in (see {RestoreReplay}).
13
+ class OnWriteResourceAccessRestored < Yes::Core::ReadModel::EventHandler
14
+ # @param event [Yes::Core::Event]
15
+ # @return [void]
16
+ def call(_event)
17
+ RestoreReplay.new(builder: Builder.new, stream_name: 'WriteResourceAccess').call(read_model)
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -35,6 +35,7 @@ module Yes
35
35
  'Authorization::WriteResourceAccessRemoved',
36
36
  'Authorization::WriteResourceAccessResourceAssigned',
37
37
  'Authorization::WriteResourceAccessResourceTypeChanged',
38
+ 'Authorization::WriteResourceAccessRestored',
38
39
  'Authorization::WriteResourceAccessRoleChanged'
39
40
  ] }
40
41
  )
@@ -46,6 +47,7 @@ module Yes
46
47
  'Authorization::ReadResourceAccessResourceTypeChanged',
47
48
  'Authorization::ReadResourceAccessRemoved',
48
49
  'Authorization::ReadResourceAccessResourceAssigned',
50
+ 'Authorization::ReadResourceAccessRestored',
49
51
  'Authorization::ReadResourceAccessRoleChanged',
50
52
  'Authorization::ReadResourceAccessScopeChanged',
51
53
  'Authorization::ReadResourceAccessServiceChanged'
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Yes
4
4
  module Auth
5
- VERSION = '1.3.0'
5
+ VERSION = '2.2.0'
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: yes-auth
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.0
4
+ version: 2.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nico Ritsche
@@ -29,14 +29,14 @@ dependencies:
29
29
  requirements:
30
30
  - - "~>"
31
31
  - !ruby/object:Gem::Version
32
- version: '1.0'
32
+ version: '2.0'
33
33
  type: :runtime
34
34
  prerelease: false
35
35
  version_requirements: !ruby/object:Gem::Requirement
36
36
  requirements:
37
37
  - - "~>"
38
38
  - !ruby/object:Gem::Version
39
- version: '1.0'
39
+ version: '2.0'
40
40
  description: Provides authorization principal models (User, Role, ResourceAccess)
41
41
  and Cerbos integration for the Yes framework
42
42
  email:
@@ -75,9 +75,11 @@ files:
75
75
  - lib/yes/auth/read_models/principals/read_resource_access/on_read_resource_access_removed.rb
76
76
  - lib/yes/auth/read_models/principals/read_resource_access/on_read_resource_access_resource_assigned.rb
77
77
  - lib/yes/auth/read_models/principals/read_resource_access/on_read_resource_access_resource_type_changed.rb
78
+ - lib/yes/auth/read_models/principals/read_resource_access/on_read_resource_access_restored.rb
78
79
  - lib/yes/auth/read_models/principals/read_resource_access/on_read_resource_access_role_changed.rb
79
80
  - lib/yes/auth/read_models/principals/read_resource_access/on_read_resource_access_scope_changed.rb
80
81
  - lib/yes/auth/read_models/principals/read_resource_access/on_read_resource_access_service_changed.rb
82
+ - lib/yes/auth/read_models/principals/restore_replay.rb
81
83
  - lib/yes/auth/read_models/principals/role/builder.rb
82
84
  - lib/yes/auth/read_models/principals/role/on_role_name_changed.rb
83
85
  - lib/yes/auth/read_models/principals/user/builder.rb
@@ -93,6 +95,7 @@ files:
93
95
  - lib/yes/auth/read_models/principals/write_resource_access/on_write_resource_access_removed.rb
94
96
  - lib/yes/auth/read_models/principals/write_resource_access/on_write_resource_access_resource_assigned.rb
95
97
  - lib/yes/auth/read_models/principals/write_resource_access/on_write_resource_access_resource_type_changed.rb
98
+ - lib/yes/auth/read_models/principals/write_resource_access/on_write_resource_access_restored.rb
96
99
  - lib/yes/auth/read_models/principals/write_resource_access/on_write_resource_access_role_changed.rb
97
100
  - lib/yes/auth/subscriptions.rb
98
101
  - lib/yes/auth/version.rb