feat: auth hardening — scope enforcement, tenant isolation, and docs
Add @PreAuthorize annotations to all API controllers (14 endpoints
across 6 controllers) enforcing OAuth2 scopes: apps:manage, apps:deploy,
billing:manage, observe:read, platform:admin.
Enforce tenant isolation: TenantResolutionFilter now rejects cross-tenant
access on /api/tenants/{id}/* paths. New TenantOwnershipValidator checks
environment/app ownership for paths without tenantId. Platform admins
bypass both layers.
Fix frontend: OrgResolver split into two useEffect hooks so scopes
refresh on org switch. Scopes now served from /api/config (single source
of truth). Bootstrap cleaned — standalone org permissions removed.
Update docs/architecture.md, docs/user-manual.md, and CLAUDE.md to
reflect all auth hardening changes.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -390,6 +390,8 @@ All role and permission management happens in Logto, not in the Cameleer SaaS ap
|
||||
|
||||
There is also a global `platform:admin` scope (separate from organization roles) that grants access to the Platform section for cross-tenant administration.
|
||||
|
||||
The full list of 10 scopes is also available programmatically via the `GET /api/config` endpoint, which the frontend uses to discover available scopes at runtime.
|
||||
|
||||
---
|
||||
|
||||
## 10. Self-Hosted Setup
|
||||
@@ -477,11 +479,13 @@ On first boot, the `logto-bootstrap` container automatically:
|
||||
- **Cameleer SaaS** (SPA) -- for the management UI frontend.
|
||||
- **Cameleer SaaS Backend** (Machine-to-Machine) -- for server-to-Logto API calls.
|
||||
- **Cameleer Dashboard** (Traditional Web App) -- for cameleer3-server OIDC login.
|
||||
3. Creates an API resource (`https://api.cameleer.local`) with all platform scopes.
|
||||
4. Creates organization roles: `admin` (all scopes) and `member` (deploy + observe scopes).
|
||||
3. Creates an API resource (`https://api.cameleer.local`) with 10 OAuth2 scopes (see Section 9).
|
||||
4. Creates organization roles with **API resource scopes** (not standalone org permissions):
|
||||
- `admin` -- 9 tenant scopes (all except `platform:admin`).
|
||||
- `member` -- 3 scopes: `apps:deploy`, `observe:read`, `observe:debug`.
|
||||
5. Creates two users:
|
||||
- Platform admin (default: `admin` / `admin`) -- has the `platform:admin` role.
|
||||
- Tenant admin (default: `camel` / `camel`) -- added to the default organization as admin.
|
||||
- Platform admin (default: `admin` / `admin`) -- has the `admin` org role plus the global `platform-admin` role (which grants `platform:admin` scope).
|
||||
- Demo user (default: `camel` / `camel`) -- added to the default organization with the `member` role.
|
||||
6. Creates a Logto organization ("Example Tenant") and assigns both users.
|
||||
7. Configures cameleer3-server with Logto OIDC settings for dashboard authentication.
|
||||
8. Writes all generated IDs and secrets to `/data/logto-bootstrap.json` for the SaaS backend to consume.
|
||||
|
||||
Reference in New Issue
Block a user