- Prisma migration: users.mdm_managed (Boolean DEFAULT false) + users.mdm_detected_at (DateTime?) - setMdmManaged() helper in server/db/profile.ts - POST /api/users/me/mdm-status — App reports MDM status to backend - cooldown/status + cooldown/request — early-return 400 when mdm_managed - protection/state — response extended with mdmManaged: boolean Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
21 lines
1019 B
SQL
21 lines
1019 B
SQL
-- Profile.mdm_managed + Profile.mdm_detected_at
|
|
--
|
|
-- mdm_managed: true wenn das Device des Users via MDM (NEFilter-Profil sideloaded
|
|
-- + non-removable) verwaltet wird. Wird vom App-Code nach nativem NEFilterManager-
|
|
-- Check gesetzt (POST /api/users/me/mdm-status).
|
|
--
|
|
-- mdm_detected_at: Zeitstempel des ersten mdm_managed=true-Writes. Wird nur beim
|
|
-- Übergang false→true gesetzt und danach nie überschrieben — Audit-Trail.
|
|
--
|
|
-- Effekte:
|
|
-- - /api/cooldown/status: canDisableProtection=false, reason="mdm_managed"
|
|
-- - /api/cooldown/request: HTTP 400 error="mdm_managed_cannot_self_deactivate"
|
|
-- - /api/protection/state: mdmManaged=true
|
|
--
|
|
-- Backfill: alle existierenden Profile bekommen mdm_managed=false (DEFAULT) und
|
|
-- mdm_detected_at=NULL — keine Verhaltensänderung für laufende Sessions.
|
|
|
|
ALTER TABLE "rebreak"."profiles"
|
|
ADD COLUMN IF NOT EXISTS "mdm_managed" BOOLEAN NOT NULL DEFAULT false,
|
|
ADD COLUMN IF NOT EXISTS "mdm_detected_at" TIMESTAMPTZ NULL;
|