You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Added
- Notifications module (Modules\Notifications): in-app admin notifications on a
Model B design - one global row per notification, per-user read state in
notification_reads, and Notifier::applyRelevance() as the single relevance/IDOR
chokepoint shared by every read path.
* Realtime delivery over Redis-backed SSE (no external hub, no JWT, no broker),
disabled by default via NotificationsConfig::$realtimeEnabled; the client
never trusts the payload and always reconciles against the DB.
* Role-aware cap on concurrent SSE connections, enforced with a single atomic
Lua EVAL over a Redis sorted set; fail-closed when Redis is unreachable.
* Rich targeting (several users and groups in one dispatch, exceptUser()
exclusions) and per-user opt-out preferences applied at read time; critical
notifications cannot be muted.
* Admin composer screen with server-side audience validation, recipient-count
preview, and a created_by accountability column.
- Settings -> Cache Management panel backed by a server-side allowlist
(Modules\Settings\Libraries\CacheRegistry): the client sends only logical ids
and glob patterns are resolved on the server, the framework-wide cache:clear /
clean() is never invoked, and the Shield RBAC config key is protected.
0 commit comments