Serve the three layers of the contact-effect stack

FeatureSecurityService
Shipped
September 7, 2026 at 8:43 AM UTC
Author
Kamo
Commit
88c9566

GET /api/security/contact-effects returns the platform, org and member layers in one round trip; PUT and DELETE on /{scope} write and reset one layer. The service never merges them — the browser has to merge again the moment a member changes something anyway. Platform writes need the new MANAGE_PLATFORM_CONTACT_EFFECTS platform right. Org writes need CONFIGURE_SYSTEM and land on the caller's OWN org from the session, never a path parameter. Member writes are for the caller alone: there is no path to write somebody else's, because an administrator Reads are ungated beyond authentication, deliberately. Every signed-in member needs the layers above them to know what to paint, and a 403 there would mean a shell with no feedback under the pointer rather than a visible failure. A near-copy of EventSoundController rather than a shared generic. The two differ only in their table and their right today, but they are separately-governed surfaces — sounds already grew an uploaded asset library and a per-device output route. The duplication is forty lines; the coupling would have been permanent.

All changes

Like what you see shipping?

Every one of these updates lands in your workspace automatically. Start free and watch it grow week after week.

Start Free ForeverView Pricing