Skip to content

feat(smarthome): TP2 — owner mapping + portal widget - #208

Merged
CallMeTechie merged 10 commits into
masterfrom
feat/smarthome-tp2
Jun 29, 2026
Merged

feat(smarthome): TP2 — owner mapping + portal widget#208
CallMeTechie merged 10 commits into
masterfrom
feat/smarthome-tp2

Conversation

@CallMeTechie

Copy link
Copy Markdown
Owner

Smart Home TP2 — Owner-Zuordnung + Portal-Widget

Setzt TP2 der Smart-Home-Initiative (Phoscon/deCONZ) um: Admin weist Geräte (Licht/Steckdose/Gruppe) einzelnen Nutzern zu; eingeloggte Portal-Nutzer sehen und steuern nur ihre eigenen Geräte. Szenen erben die Zuweisung ihrer Gruppe (§16). Alles hinter dem Pro-Key smarthome. Keine neue Migration (Tabelle smarthome_resource_owners existiert aus TP1 V64).

Tasks (subagent-driven, je zweistufiges Review)

  1. smarthomeOwners-Service — n:m + Szenen-Vererbung (resourcesOwnedBy/canAccess/inheritedOwnersOf), validate-before-write + atomarer Replace
  2. Owner-Cleanup in der users.remove-Transaktion (neben Midea-Hook)
  3. Admin-API PUT /resources/:id/owners + owners in GET /resources (Szenen = geerbte Owner)
  4. Admin-UI Owner-Picker auf Licht/Steckdose/Gruppe (3 Themes), Szenenkarten zeigen geerbte Owner read-only
  5. Portal-Widget-Toggle widgets.smarthome (Default an)
  6. Portal-API GET /smarthome (owner-scoped, redigiert) + POST /smarthome/:id/state (login→canAccess)
  7. Portal-Widget c-smarthome (Switch/Slider/Szene-Aktivieren)

Sicherheit

  • Owner-ID nur aus Middleware (req.portalOwnerId / req.session.userId) — kein IDOR
  • Portal-Payload redigiert per Allowlist (id,kind,name,capabilities,state; state{on,bri,reachable}) — keine Gateway-/deCONZ-/Route-Internas
  • Gate-Reihenfolge widget→license→login_required→canAccess (wie Midea)
  • CSP-konform (kein inline onclick), client-i18n in GC.t-Bridge (3 Layouts) bzw. portal-i18n-Block

Spec-Konformität (§7/§8/§16/§17)

§17 ist maßgeblich: login_required = 200 + reason (nicht 401), Control via canAccess (Szenen-Vererbung), Sensoren/Schalter nicht im Portal.

Tests

6 neue Test-Dateien (Owner-Service, Cleanup, Admin-API, Portal-API, Widget-Flag). Laufen über GitHub Actions.

Review

Finales Whole-Branch-Review (opus): Ready to merge — eine Important-Findung (bare-async throw e im Owners-PUT könnte Request hängen lassen) gefixt durch wrap() (32ea8a0).

🤖 Generated with Claude Code

@CallMeTechie
CallMeTechie merged commit b995048 into master Jun 29, 2026
7 of 8 checks passed
@CallMeTechie
CallMeTechie deleted the feat/smarthome-tp2 branch June 29, 2026 22:36
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant