fix: rename SettingsPermissionsGuard to SettingsPermissionGuard for consistency#15712
Conversation
…onsistency The guard was named SettingsPermissionsGuard (with an 's') which was inconsistent with other permission guards (CustomPermissionGuard, NoPermissionGuard, etc.). This inconsistency caused the ESLint rule 'graphql-resolvers-should-be-guarded' to fail because it checks if guard names end with 'PermissionGuard', but 'SettingsPermissionsGuard' ends with 'sGuard'. Changes: - Renamed guard file: settings-permissions.guard.ts → settings-permission.guard.ts - Renamed export: SettingsPermissionsGuard → SettingsPermissionGuard - Renamed internal class: SettingsPermissionsMixin → SettingsPermissionMixin - Updated all 122 references across 44 files - Renamed test file to match This ensures consistent naming across all permission guards and fixes ESLint validation for mutations that rely on class-level permission guards.
There was a problem hiding this comment.
Greptile Overview
Greptile Summary
This PR performs a straightforward refactoring to fix naming inconsistency in the permission guard system.
Key Changes:
- Renamed
SettingsPermissionsGuard→SettingsPermissionGuard(removed 's' from "Permissions") - Renamed
SettingsPermissionsMixin→SettingsPermissionMixin(internal class) - Renamed file
settings-permissions.guard.ts→settings-permission.guard.ts - Updated all 122+ references across 45 files including resolvers, tests, and documentation comments
- Fixed ESLint rule comment to reflect new naming
Why This Matters:
The ESLint rule graphql-resolvers-should-be-guarded validates guard names by checking if they end with PermissionGuard. The old name SettingsPermissionsGuard ended with sGuard (not PermissionGuard), causing ESLint validation to fail. This rename brings it in line with other guards: CustomPermissionGuard, NoPermissionGuard, ImpersonatePermissionGuard.
Minor Note:
i18n locale files still contain comment references to the old file path settings-permissions.guard.ts. These are auto-generated lingui comments that will update on the next i18n extraction run.
Confidence Score: 5/5
- This PR is completely safe to merge with zero risk
- This is a pure refactoring PR with mechanical find-and-replace changes. No logic was modified, only names. The renaming is complete and consistent across all files. Tests pass, linting passes, and the change fixes the ESLint validation issue as intended.
- No files require special attention
Important Files Changed
File Analysis
| Filename | Score | Overview |
|---|---|---|
| packages/twenty-server/src/engine/guards/settings-permission.guard.ts | 5/5 | Renamed from settings-permissions.guard.ts with class name updated from SettingsPermissionsGuard to SettingsPermissionGuard for naming consistency |
| packages/twenty-server/src/engine/guards/tests/settings-permission.guard.spec.ts | 5/5 | Test file renamed and updated to import and test the renamed SettingsPermissionGuard |
| packages/twenty-server/src/engine/guards/custom-permission.guard.ts | 5/5 | Updated documentation comment to reference SettingsPermissionGuard instead of SettingsPermissionsGuard |
| packages/twenty-server/src/engine/guards/no-permission.guard.ts | 5/5 | Updated documentation comment to reference SettingsPermissionGuard instead of SettingsPermissionsGuard |
| tools/eslint-rules/utils/typedTokenHelpers.ts | 5/5 | Updated code comment example from SettingsPermissionsGuard to SettingsPermissionGuard |
Sequence Diagram
sequenceDiagram
participant Dev as Developer
participant ESLint as ESLint Rule
participant Resolver as GraphQL Resolver
participant Guard as SettingsPermissionGuard
participant PermSvc as PermissionsService
Note over Dev,ESLint: Before PR: Naming Inconsistency
Dev->>Resolver: Define @UseGuards(SettingsPermissionsGuard)
ESLint->>Resolver: Check guard name pattern
ESLint->>ESLint: Does name end with "PermissionGuard"?
ESLint-->>Dev: ❌ Fails (ends with "sGuard")
Note over Dev,ESLint: After PR: Consistent Naming
Dev->>Resolver: Define @UseGuards(SettingsPermissionGuard)
ESLint->>Resolver: Check guard name pattern
ESLint->>ESLint: Does name end with "PermissionGuard"?
ESLint-->>Dev: ✅ Passes
Note over Resolver,PermSvc: Runtime Permission Check Flow
Resolver->>Guard: canActivate(context)
Guard->>Guard: Check workspace activation status
alt Workspace being created
Guard-->>Resolver: Allow (bypass permission)
else Active workspace
Guard->>PermSvc: userHasWorkspaceSettingPermission()
PermSvc-->>Guard: boolean result
alt Has permission
Guard-->>Resolver: Allow
else No permission
Guard-->>Resolver: Throw PermissionsException
end
end
45 files reviewed, no comments
|
🚀 Preview Environment Ready! Your preview environment is available at: http://bore.pub:24312 This environment will automatically shut down when the PR is closed or after 5 hours. |
Problem
The ESLint rule
graphql-resolvers-should-be-guardedintroduced in #15392 was failing on main because the guardSettingsPermissionsGuardhad inconsistent naming.Root Cause
The guard was named
SettingsPermissionsGuard(with an 's') which was inconsistent with other permission guards:CustomPermissionGuardNoPermissionGuardImpersonatePermissionGuardSettingsPermissionsGuard(inconsistent!)The ESLint rule checks if guard names end with
PermissionGuard, butSettingsPermissionsGuardends withsGuard, so it wasn't recognized as a permission guard.Solution
Renamed the guard to be consistent with the naming convention:
settings-permissions.guard.ts→settings-permission.guard.tsSettingsPermissionsGuard→SettingsPermissionGuardSettingsPermissionsMixin→SettingsPermissionMixinsettings-permissions.guard.spec.ts→settings-permission.guard.spec.tsTesting
npx nx run twenty-server:lintpassesnpx nx run twenty-server:typecheckpassesRelated
Fixes issues introduced in #15392