Skip to content

feat(ZMSKVR-1345): hide scope source and scope selection for non-superuser - #2414

Merged
ThomasAFink merged 35 commits into
nextfrom
feature-zmskvr-1345-show-scope-sorce-only-for-superuser
Jun 16, 2026
Merged

feat(ZMSKVR-1345): hide scope source and scope selection for non-superuser#2414
ThomasAFink merged 35 commits into
nextfrom
feature-zmskvr-1345-show-scope-sorce-only-for-superuser

Conversation

@ThomasAFink

@ThomasAFink ThomasAFink commented May 21, 2026

Copy link
Copy Markdown
Member

Pull Request Checklist (Feature Branch to next):

  • Ich habe die neuesten Änderungen aus dem next Branch in meinen Feature-Branch gemergt.
  • Relevante Tests wurden mit zmsautomation ausgeführt.
  • Das Code-Review wurde abgeschlossen.
  • Fachliche Tests wurden durchgeführt und sind abgeschlossen.
  • Ich habe erforderliche Dokumentation im Ordner docs hinzugefügt.

cleans up js form seperation
Screenshot 2026-06-02 at 17 07 11
Screenshot 2026-05-21 at 19 04 06

adds owner permission called jurisdiction
Screenshot 2026-06-02 at 16 56 32

Summary by CodeRabbit

Release Notes

  • New Features

    • Permission-based scope editing interface that adapts for restricted users
  • Improvements

    • Department email field now required and validated as a valid email address
    • Scope data protection: non-superusers cannot modify provider/source configuration
    • Enhanced permission checks for administrative actions across department, scope, and organization management

msfb3 and others added 8 commits April 29, 2026 11:16
…rusers in Twig

Split scope source form into superuser-only and details-only React mounts.
Superuser check is enforced server-side in the template only, not in JS.
…pdate

Require superuser to create owners, organisations, departments, and scopes.
Non-superusers may still update scopes but cannot change provider or source.
addData mutates in place; without a clone, existingScope was already
updated before withProviderSourceFrom could restore provider and source.
@coderabbitai

coderabbitai Bot commented May 21, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

This PR implements permission-based scope provider/source editing: superusers can modify sources via a form interface, while restricted users view read-only details. The backend preserves provider/source from existing scopes for non-superusers during updates; the frontend splits components by permission; and department email persistence switches from insert to update semantics.

Changes

Superuser permission control for scope provider/source

Layer / File(s) Summary
Entity-level provider/source preservation
zmsentities/src/Zmsentities/Scope.php, zmsentities/tests/Zmsentities/ScopeTest.php
Scope::withProviderSourceFrom() clones the scope and copies provider and source fields from a reference scope; tests validate preservation across base and post-update scenarios.
Admin backend permission checks and scope update routing
zmsadmin/src/Zmsadmin/OwnerAdd.php, zmsadmin/src/Zmsadmin/OrganisationAddDepartment.php, zmsadmin/src/Zmsadmin/OwnerAddOrganisation.php, zmsadmin/src/Zmsadmin/DepartmentAddScope.php, zmsadmin/src/Zmsadmin/Scope.php
Admin controllers throw UserAccountMissingRights when workstation user lacks superuser permission; Scope::writeUpdatedEntity() accepts existing scope and workstation, validates non-superusers, and copies provider/source data when required before persisting.
API backend permission checks and scope update cloning
zmsapi/src/Zmsapi/DepartmentAddScope.php, zmsapi/src/Zmsapi/OrganisationAddDepartment.php, zmsapi/src/Zmsapi/OwnerAddOrganisation.php, zmsapi/src/Zmsapi/ScopeUpdate.php
API controllers instantiate reusable Helper\User objects and add explicit permission checks; ScopeUpdate clones the persisted scope, validates rights from the original, and preserves provider/source for non-superusers via withProviderSourceFrom().
Test updates for permission enforcement
zmsapi/tests/Zmsapi/OwnerAddOrganisationTest.php, zmsapi/tests/Zmsapi/ScopeUpdateTest.php, zmsapi/tests/Zmsapi/DepartmentUpdateTest.php
API and admin tests grant superuser and entity permissions in setup; new ScopeUpdateTest cases verify route id immutability and provider/source preservation for restricted users; DepartmentUpdateTest includes email in response expectations.
Read-only scope details component
zmsadmin/js/block/scope/sourceReadForm.js
New SourceReadView React component renders provider details as read-only text fields; includes conditional hidden inputs for standalone mode and propTypes validation.
Source select component refactor for superuser-only editing
zmsadmin/js/block/scope/sourceSelectForm.js
SourceSelectView removes lifecycle methods, wraps render in a fragment, moves conditional hidden provider[source] under permission checks, removes read-only provider contact fields, and marks permissions, changeHandler, and onChangeSourceHandler as required props.
Frontend scope view integration and permission-based routing
zmsadmin/js/page/scopeEdit/index.js, zmsadmin/js/page/scopeEdit/indexRestricted.js, zmsadmin/js/reactcomponents.js, zmsadmin/templates/block/scope/form.twig
ScopeView renders both SourceSelectView and SourceReadView with shared props; new ScopeRestrictedView wraps read-only view; template conditionally renders form container based on permissions.scope or permissions.restrictedscope; reactcomponents binds both components to corresponding selectors.
Department email persistence, DB query, and schema validation
zmsdb/src/Zmsdb/Department.php, zmsdb/src/Zmsdb/Query/Department.php, zmsadmin/templates/block/department/form.twig, zmsentities/schema/department.json, zmsentities/schema/dereferenced/department.json
Mail persistence switches from insert to update/REPLACE semantics; old insert method removed and department write calls update; database query includes reminder fields in named parameters; department form input uses type="email" and required=true; schema updates localize email label to "Absender-Adresse" and refactor dereferenced schema to oneOf null or string.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~22 minutes

Suggested reviewers

  • Fabinatix97
  • MoDaae

Poem

🐰 A rabbit's ode to permissions wise:
Sources now guard with superuser eyes,
Read-only views for those without the keys,
While cloned scopes dance with gentle preserves—
Thump-thump goes the form, email now serves!

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 37.93% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title accurately describes the main feature: hiding scope source and selection for non-superusers, which is the primary focus across multiple file changes.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feature-zmskvr-1345-show-scope-sorce-only-for-superuser

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@ThomasAFink
ThomasAFink requested review from Fabinatix97 and MoDaae May 21, 2026 17:45
@ThomasAFink ThomasAFink changed the title feat(ZMSKVR-1345): hide scope sorce and scope selection for non-superuser feat(ZMSKVR-1345): hide scope source and scope selection for non-superuser May 21, 2026
@ThomasAFink

Copy link
Copy Markdown
Member Author

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 5

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
zmsadmin/js/page/scopeEdit/index.js (1)

37-41: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Replace console.log in the AJAX failure branch.

These debug logs should be removed or converted to proper error logging behavior.

Suggested fix
         }).fail((err) => {
-            if (err.status === 404) {
-                console.log('404 error, ignored')
-            } else {
-                console.log('error', err)
-            }
+            if (err.status !== 404) {
+                console.error('Failed to load provider list for source', err)
+            }
         })
As per coding guidelines: `**/*.{js,jsx,ts,tsx}`: Flag specific logging violations including `console.log()` usage.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@zmsadmin/js/page/scopeEdit/index.js` around lines 37 - 41, The AJAX failure
branch in scopeEdit/index.js currently uses console.log for error handling;
replace these debug prints with the app's proper logging/notification mechanism
(e.g., call the centralized logger or error handler and/or show a user-facing
message) in the failure callback that contains the if (err.status === 404) check
so 404s are handled quietly via the chosen logger/flow and all other errors are
logged with error-level details and context; update the branch that references
err.status to use the standard logger API (or toast/notification utility)
instead of console.log.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@zmsadmin/js/reactcomponents.js`:
- Line 21: Remove the startup debug console log by deleting the
console.log("Loaded react components...") call in reactcomponents.js (do not
leave stray debug prints); if you need non-runtime diagnostics, replace it with
a gated logger or development-only check (e.g., use a debug util or condition on
NODE_ENV === "development") so no console.log remains in production frontend
code.

In `@zmsadmin/src/Zmsadmin/Scope.php`:
- Around line 104-107: The authorization currently trusts a client-supplied
$entity->id to decide create vs update which can be spoofed; update the check in
the Scope class to determine whether this is a create or update by checking
server-side persistence instead of the raw request property (e.g. use the entity
repository/ORM to find an existing record by the provided identifier or a unique
business key, or call a canonical getter that reflects persisted state rather
than raw payload), then enforce getUseraccount()->isSuperUser() only when the
server-side lookup shows the operation would create a new record the caller is
not permitted to create; reference $workstation, $entity and
getUseraccount()->isSuperUser() in your changes and replace the
client-controlled $entity->id branching with a DB/ORM existence check or an
explicit operation flag derived from server state.

In `@zmsapi/src/Zmsapi/DepartmentAddScope.php`:
- Around line 25-31: The current flow loads the department via (new
\BO\Zmsdb\Department())->readEntity(...) before enforcing the superuser
requirement; reorder the checks so Helper\User->checkPermissions('superuser') is
called before calling readEntity, and then after successfully loading
$department run $user->checkRights('department', new
\BO\Zmsentities\Useraccount\EntityAccess($department)); this avoids unnecessary
DB reads and matches the pattern used in other create endpoints.

In `@zmsapi/src/Zmsapi/ScopeUpdate.php`:
- Around line 30-32: The code clones $existingScope and calls
$scope->addData($input), but addData can overwrite the entity id allowing a
body-provided id to bypass route authorization; before calling addData remove or
ignore any id from the incoming payload (e.g. unset $input['id'] or
validate/override $scope->id afterwards) so the id on $scope remains identical
to $existingScope->id; ensure this change is applied in the ScopeUpdate flow
around the clone/addData/testValid sequence (referencing $scope, $existingScope,
and addData).

In `@zmsentities/tests/Zmsentities/ScopeTest.php`:
- Around line 48-61: The test testWithProviderSourceFromAfterAddData currently
doesn't verify that addData() didn't mutate the original $existing via aliasing;
before calling $updated->addData([...]) capture $existing's original provider
and source (e.g. $origProvider = $existing->getProviderId(); $origSource =
$existing->getSource()) and after addData() assert that $existing still returns
those originals (using getProviderId() and getSource()), ensuring addData()
doesn't mutate $existing; keep the existing assertions about
withProviderSourceFrom() as they are.

---

Outside diff comments:
In `@zmsadmin/js/page/scopeEdit/index.js`:
- Around line 37-41: The AJAX failure branch in scopeEdit/index.js currently
uses console.log for error handling; replace these debug prints with the app's
proper logging/notification mechanism (e.g., call the centralized logger or
error handler and/or show a user-facing message) in the failure callback that
contains the if (err.status === 404) check so 404s are handled quietly via the
chosen logger/flow and all other errors are logged with error-level details and
context; update the branch that references err.status to use the standard logger
API (or toast/notification utility) instead of console.log.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: b1a162bb-c3f2-4172-b0a2-063905a54bcc

📥 Commits

Reviewing files that changed from the base of the PR and between b32c0d8 and 885b72b.

📒 Files selected for processing (21)
  • zmsadmin/js/block/scope/sourcesDetailsForm.js
  • zmsadmin/js/block/scope/sourcesSuperuserSelectForm.js
  • zmsadmin/js/page/scopeEdit/detailsOnly.js
  • zmsadmin/js/page/scopeEdit/index.js
  • zmsadmin/js/reactcomponents.js
  • zmsadmin/src/Zmsadmin/DepartmentAddScope.php
  • zmsadmin/src/Zmsadmin/OrganisationAddDepartment.php
  • zmsadmin/src/Zmsadmin/OwnerAdd.php
  • zmsadmin/src/Zmsadmin/OwnerAddOrganisation.php
  • zmsadmin/src/Zmsadmin/Scope.php
  • zmsadmin/templates/block/scope/form.twig
  • zmsapi/src/Zmsapi/DepartmentAddScope.php
  • zmsapi/src/Zmsapi/OrganisationAddDepartment.php
  • zmsapi/src/Zmsapi/OwnerAddOrganisation.php
  • zmsapi/src/Zmsapi/ScopeUpdate.php
  • zmsapi/tests/Zmsapi/DepartmentAddScopeTest.php
  • zmsapi/tests/Zmsapi/OrganisationAddDepartmentTest.php
  • zmsapi/tests/Zmsapi/OwnerAddOrganisationTest.php
  • zmsapi/tests/Zmsapi/ScopeUpdateTest.php
  • zmsentities/src/Zmsentities/Scope.php
  • zmsentities/tests/Zmsentities/ScopeTest.php

Comment thread zmsadmin/js/reactcomponents.js
Comment thread zmsadmin/src/Zmsadmin/Scope.php Outdated
Comment thread zmsapi/src/Zmsapi/DepartmentAddScope.php Outdated
Comment thread zmsapi/src/Zmsapi/ScopeUpdate.php
Comment thread zmsentities/tests/Zmsentities/ScopeTest.php
ThomasAFink and others added 6 commits May 21, 2026 20:38
Capture provider/source before addData and verify the reference scope is
unchanged, so shallow-clone aliasing regressions are caught.
Restore route-authorized scope id after addData so updates cannot target a
different scope than the one checked for access rights.
…create

Reorder DepartmentAddScope authorization to match other create endpoints
and avoid unnecessary DB reads for rejected callers.
Base scope create/update on loaded existingScope instead of client-supplied
entity id so non-superusers cannot bypass create restrictions or miss updates.
Comment thread zmsadmin/src/Zmsadmin/OrganisationAddDepartment.php Outdated
Comment thread zmsadmin/js/block/scope/sourcesSuperuserSelectForm.js Outdated
Comment thread zmsadmin/src/Zmsadmin/OwnerAddOrganisation.php Outdated
Comment thread zmsadmin/templates/block/scope/form.twig Outdated
Comment thread zmsapi/src/Zmsapi/OwnerAddOrganisation.php Outdated
Use permissions.scope instead of superuser for DLDB source selection,
scope create/update, and the scope form source block. Align add-child
endpoints with organisation and department permissions. Rename React
blocks to SourceSelectView and SourceReadView with ScopeRestrictedView
entry for restrictedscope users.
Require sender email in the department form and schema validation to
avoid oneOf null errors when the field is submitted empty.
Schema required email broke user account edits that only submit department ids.
Keep Absender-Adresse required in the department form template.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
zmsentities/schema/department.json (1)

89-103: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

minLength does not make email mandatory server-side.

This only validates email when the property is present. Callers can still omit the key entirely, and zmsdb/src/Zmsdb/Department.php will then skip updateDepartmentMail() because toProperty()->email->isAvailable() is false. If the sender address is now required on save, add a top-level "required": ["email"] and mirror that in zmsentities/schema/dereferenced/department.json.

As per coding guidelines, "Always find root cause. Always look for the root cause of a problem."

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@zmsentities/schema/department.json` around lines 89 - 103, The schema
currently validates "email" only when present, so make it mandatory by adding a
top-level "required": ["email"] to department.json and add the same requirement
in the dereferenced schema (zmsentities/schema/dereferenced/department.json) to
ensure server-side validation; then re-run schema generation/validation so
callers cannot omit the key and Department.php's updateDepartmentMail() (and the
toProperty()->email->isAvailable() check) will always receive an email value on
save.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@zmsentities/schema/department.json`:
- Around line 89-92: The "email" property in zmsentities/schema/department.json
uses an overly strict hand-rolled regex that rejects valid addresses (e.g., with
'+'); replace the pattern with a simpler, permissive validator: remove the
current "pattern" and either add a standard JSON Schema email validator
("format": "email") or a minimal regex such as "^[^@\\s]+@[^@\\s]+\\.[^@\\s]+$"
while keeping "type": "string" and "minLength": 1; update the "email" field
definition accordingly (look for the "email" property object) so common valid
sender addresses are accepted.

---

Outside diff comments:
In `@zmsentities/schema/department.json`:
- Around line 89-103: The schema currently validates "email" only when present,
so make it mandatory by adding a top-level "required": ["email"] to
department.json and add the same requirement in the dereferenced schema
(zmsentities/schema/dereferenced/department.json) to ensure server-side
validation; then re-run schema generation/validation so callers cannot omit the
key and Department.php's updateDepartmentMail() (and the
toProperty()->email->isAvailable() check) will always receive an email value on
save.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 1ec5c283-503b-49e1-8aae-2cd3cf3a6649

📥 Commits

Reviewing files that changed from the base of the PR and between 37b1d92 and 340bd47.

📒 Files selected for processing (5)
  • zmsadmin/templates/block/department/form.twig
  • zmsdb/src/Zmsdb/Department.php
  • zmsdb/src/Zmsdb/Query/Department.php
  • zmsentities/schema/department.json
  • zmsentities/schema/dereferenced/department.json
💤 Files with no reviewable changes (1)
  • zmsdb/src/Zmsdb/Query/Department.php

Comment thread zmsentities/schema/department.json Outdated
Align Twig mount points with reactcomponents selectors and use
restrictedscope for the read-only scope source block.
Departments without a sender address are stored as null; validation
must accept null while the admin form still requires email on save.
Align test user with organisation permission and owner access via department 96.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
zmsapi/tests/Zmsapi/DepartmentUpdateTest.php (1)

17-26: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Assert the returned email as well.

Lines 17-21 add email to the request, but this test still never verifies that DepartmentUpdate serializes email back in the response. Since zmsapi/src/Zmsapi/DepartmentUpdate.php returns the updated entity, a regression dropping that field would still pass here.

Suggested assertion
         $this->assertStringContainsString('Test Department Update', (string)$response->getBody());
+        $this->assertStringContainsString('"email":"test@example.com"', (string)$response->getBody());
         $this->assertStringContainsString('department.json', (string)$response->getBody());
         $this->assertTrue(200 == $response->getStatusCode());
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@zmsapi/tests/Zmsapi/DepartmentUpdateTest.php` around lines 17 - 26, The test
adds an "email" in the request but never verifies it's returned; update
DepartmentUpdateTest (the test that calls render) to assert the response
includes the email value from the update (e.g.
assertStringContainsString('test@example.com', (string)$response->getBody()) or
decode the response JSON and assertEquals('test@example.com', $json['email']));
locate the call to render and the subsequent assertions in DepartmentUpdateTest
and add this email assertion so DepartmentUpdate's serialization of email is
validated.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Outside diff comments:
In `@zmsapi/tests/Zmsapi/DepartmentUpdateTest.php`:
- Around line 17-26: The test adds an "email" in the request but never verifies
it's returned; update DepartmentUpdateTest (the test that calls render) to
assert the response includes the email value from the update (e.g.
assertStringContainsString('test@example.com', (string)$response->getBody()) or
decode the response JSON and assertEquals('test@example.com', $json['email']));
locate the call to render and the subsequent assertions in DepartmentUpdateTest
and add this email assertion so DepartmentUpdate's serialization of email is
validated.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 48ec290b-c45c-4bb8-a961-b0bf9fc933bd

📥 Commits

Reviewing files that changed from the base of the PR and between 340bd47 and b357b15.

⛔ Files ignored due to path filters (1)
  • zmsstatistic/package-lock.json is excluded by !**/package-lock.json
📒 Files selected for processing (6)
  • zmsadmin/js/reactcomponents.js
  • zmsadmin/templates/block/scope/form.twig
  • zmsapi/tests/Zmsapi/DepartmentUpdateTest.php
  • zmsapi/tests/Zmsapi/OwnerAddOrganisationTest.php
  • zmsentities/schema/department.json
  • zmsentities/schema/dereferenced/department.json

…ddScopeTest

Grant department permission so checkRights passes alongside scope permission and department assignment.
Add cases for missing department, scope, or both permissions.
Introduce jurisdiction permission with DB migrations and grant it to system_admin.
Gate owner CRUD in zmsadmin and zmsapi on jurisdiction instead of superuser or organisation.
Required after jurisdiction permission check was added to OwnerDelete.
@ThomasAFink
ThomasAFink requested a review from MoDaae June 3, 2026 09:23
@ThomasAFink
ThomasAFink requested review from a team as code owners June 5, 2026 01:05
Comment thread zmsstatistic/package-lock.json
@ThomasAFink
ThomasAFink requested a review from MoDaae June 8, 2026 12:09
@ThomasAFink
ThomasAFink merged commit 1387240 into next Jun 16, 2026
3 checks passed
@ThomasAFink
ThomasAFink deleted the feature-zmskvr-1345-show-scope-sorce-only-for-superuser branch July 31, 2026 13:15
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants