Packages
phoenix_kit
1.7.70
1.7.208
1.7.207
1.7.206
1.7.205
1.7.204
1.7.203
1.7.202
1.7.201
1.7.200
1.7.199
1.7.198
1.7.197
1.7.196
1.7.194
1.7.193
1.7.192
1.7.191
1.7.190
1.7.189
1.7.187
1.7.186
1.7.185
1.7.184
1.7.183
1.7.182
1.7.181
1.7.180
1.7.179
1.7.178
1.7.177
1.7.176
1.7.175
1.7.174
1.7.173
1.7.172
1.7.171
1.7.170
1.7.169
1.7.168
1.7.167
1.7.166
1.7.165
1.7.164
1.7.162
1.7.161
1.7.160
1.7.159
1.7.157
1.7.156
1.7.155
1.7.154
1.7.153
1.7.152
1.7.151
1.7.150
1.7.149
1.7.146
1.7.145
1.7.144
1.7.143
1.7.138
1.7.133
1.7.132
1.7.131
1.7.130
1.7.128
1.7.126
1.7.125
1.7.121
1.7.120
1.7.119
1.7.118
1.7.117
1.7.116
1.7.115
1.7.114
1.7.113
1.7.112
1.7.111
1.7.110
1.7.109
1.7.108
1.7.107
1.7.106
1.7.105
1.7.104
1.7.103
1.7.102
1.7.101
1.7.100
1.7.99
1.7.98
1.7.97
1.7.96
1.7.95
1.7.94
1.7.93
1.7.92
1.7.91
1.7.90
1.7.89
1.7.88
1.7.87
1.7.86
1.7.85
1.7.84
1.7.83
1.7.82
1.7.81
1.7.80
1.7.79
1.7.78
1.7.77
1.7.76
1.7.75
1.7.74
1.7.71
1.7.70
1.7.69
1.7.66
1.7.65
1.7.64
1.7.63
1.7.62
1.7.61
1.7.59
1.7.58
1.7.57
1.7.56
1.7.55
1.7.54
1.7.53
1.7.52
1.7.51
1.7.49
1.7.44
1.7.43
1.7.42
1.7.41
1.7.39
1.7.38
1.7.37
1.7.36
1.7.34
1.7.33
1.7.31
1.7.30
1.7.29
1.7.28
1.7.27
1.7.26
1.7.25
1.7.24
1.7.23
1.7.22
1.7.21
1.7.20
1.7.19
1.7.18
1.7.17
1.7.16
1.7.15
1.7.14
1.7.13
1.7.12
1.7.11
1.7.10
1.7.9
1.7.8
1.7.7
1.7.6
1.7.5
1.7.4
1.7.3
1.7.2
1.7.1
1.7.0
1.6.20
1.6.19
1.6.18
1.6.17
1.6.16
1.6.15
1.6.14
1.6.13
1.6.12
1.6.11
1.6.10
1.6.9
1.6.8
1.6.7
1.6.6
1.6.5
1.6.4
1.6.3
1.5.2
1.5.1
1.5.0
1.4.9
1.4.8
1.4.7
1.4.6
1.4.5
1.4.4
1.4.3
1.4.2
1.4.1
1.4.0
1.3.2
1.3.1
1.3.0
1.2.10
1.2.9
1.2.8
1.2.7
1.2.5
1.2.4
1.2.2
1.2.1
1.2.0
1.1.0
1.0.0
A foundation for building Elixir Phoenix apps — SaaS, social networks, ERP systems, marketplaces, and more
Current section
Files
Jump to
Current section
Files
lib/phoenix_kit/admin/events.ex
defmodule PhoenixKit.Admin.Events do
@moduledoc """
PubSub event broadcasting for PhoenixKit admin panels.
This module provides functions to broadcast changes in users, roles, sessions, and
dashboard statistics to all connected admin interfaces.
## Topics
- `phoenix_kit:admin:users` - User changes (creation, updates, role changes)
- `phoenix_kit:admin:roles` - Role changes (creation, updates, deletion)
- `phoenix_kit:admin:sessions` - Session changes (creation, revocation)
- `phoenix_kit:admin:presence` - Anonymous and authenticated session presence
- `phoenix_kit:admin:stats` - Dashboard statistics updates
- `phoenix_kit:admin:modules` - Module enable/disable changes
## Events
### User Events
- `{:user_created, user}` - New user registered
- `{:user_updated, user}` - User profile/status updated
- `{:user_confirmed, user}` - User email confirmed
- `{:user_unconfirmed, user}` - User email unconfirmed
- `{:user_role_assigned, user, role_name}` - Role assigned to user
- `{:user_role_removed, user, role_name}` - Role removed from user
- `{:user_roles_synced, user, new_roles}` - User roles synchronized
### Role Events
- `{:role_created, role}` - New role created
- `{:role_updated, role}` - Role updated
- `{:role_deleted, role}` - Role deleted
### Session Events
- `{:session_created, user, token_info}` - New session created
- `{:session_revoked, token_uuid}` - Session revoked
- `{:user_sessions_revoked, user_uuid, count}` - All user sessions revoked
- `{:sessions_stats_updated, stats}` - Session statistics updated
### Presence Events
- `{:anonymous_session_connected, session_id, session_info}` - Anonymous visitor connected
- `{:anonymous_session_disconnected, session_id}` - Anonymous visitor disconnected
- `{:user_session_connected, user_uuid, session_info}` - Authenticated user connected
- `{:user_session_disconnected, user_uuid, session_id}` - Authenticated user disconnected
- `{:presence_stats_updated, stats}` - Real-time presence statistics updated
### Statistics Events
- `{:stats_updated, stats}` - Dashboard statistics updated
## Examples
# Broadcast user creation
PhoenixKit.Admin.Events.broadcast_user_created(user)
# Broadcast role assignment
PhoenixKit.Admin.Events.broadcast_user_role_assigned(user, "Admin")
# Broadcast statistics update
PhoenixKit.Admin.Events.broadcast_stats_updated()
"""
alias PhoenixKit.PubSub.Manager
alias PhoenixKit.Users.Roles
alias PhoenixKit.Users.Sessions
# Topic names
@topic_users "phoenix_kit:admin:users"
@topic_roles "phoenix_kit:admin:roles"
@topic_sessions "phoenix_kit:admin:sessions"
@topic_presence "phoenix_kit:admin:presence"
@topic_stats "phoenix_kit:admin:stats"
@topic_permissions "phoenix_kit:admin:permissions"
@topic_modules "phoenix_kit:admin:modules"
## User Events
@doc """
Broadcasts user creation event to admin panels.
"""
def broadcast_user_created(user) do
broadcast(@topic_users, {:user_created, user})
maybe_broadcast_stats_updated()
end
@doc """
Broadcasts user update event to admin panels.
"""
def broadcast_user_updated(user) do
broadcast(@topic_users, {:user_updated, user})
maybe_broadcast_stats_updated()
end
@doc """
Broadcasts user role assignment event to admin panels.
"""
def broadcast_user_role_assigned(user, role_name) do
broadcast(@topic_users, {:user_role_assigned, user, role_name})
maybe_broadcast_stats_updated()
end
@doc """
Broadcasts user role removal event to admin panels.
"""
def broadcast_user_role_removed(user, role_name) do
broadcast(@topic_users, {:user_role_removed, user, role_name})
maybe_broadcast_stats_updated()
end
@doc """
Broadcasts user roles synchronization event to admin panels.
"""
def broadcast_user_roles_synced(user, new_roles) do
broadcast(@topic_users, {:user_roles_synced, user, new_roles})
maybe_broadcast_stats_updated()
end
@doc """
Broadcasts user confirmation event to admin panels.
"""
def broadcast_user_confirmed(user) do
broadcast(@topic_users, {:user_confirmed, user})
maybe_broadcast_stats_updated()
end
@doc """
Broadcasts user unconfirmation event to admin panels.
"""
def broadcast_user_unconfirmed(user) do
broadcast(@topic_users, {:user_unconfirmed, user})
maybe_broadcast_stats_updated()
end
@doc """
Broadcasts user deletion event to admin panels.
"""
def broadcast_user_deleted(user) do
broadcast(@topic_users, {:user_deleted, user})
maybe_broadcast_stats_updated()
end
## Role Events
@doc """
Broadcasts role creation event to admin panels.
"""
def broadcast_role_created(role) do
broadcast(@topic_roles, {:role_created, role})
maybe_broadcast_stats_updated()
end
@doc """
Broadcasts role update event to admin panels.
"""
def broadcast_role_updated(role) do
broadcast(@topic_roles, {:role_updated, role})
end
@doc """
Broadcasts role deletion event to admin panels.
"""
def broadcast_role_deleted(role) do
broadcast(@topic_roles, {:role_deleted, role})
maybe_broadcast_stats_updated()
end
## Session Events
@doc """
Broadcasts session creation event to admin panels.
"""
def broadcast_session_created(user, token_info) do
broadcast(@topic_sessions, {:session_created, user, token_info})
broadcast_sessions_stats_updated()
end
@doc """
Broadcasts session revocation event to admin panels.
"""
def broadcast_session_revoked(token_uuid) do
broadcast(@topic_sessions, {:session_revoked, token_uuid})
broadcast_sessions_stats_updated()
end
@doc """
Broadcasts user sessions revocation event to admin panels.
"""
def broadcast_user_sessions_revoked(user_uuid, count) do
broadcast(@topic_sessions, {:user_sessions_revoked, user_uuid, count})
broadcast_sessions_stats_updated()
end
@doc """
Broadcasts session statistics update event to admin panels.
"""
def broadcast_sessions_stats_updated do
stats = Sessions.get_session_stats()
broadcast(@topic_sessions, {:sessions_stats_updated, stats})
end
## Presence Events
@doc """
Broadcasts anonymous session connection event to admin panels.
"""
def broadcast_anonymous_session_connected(session_id, session_info) do
broadcast(@topic_presence, {:anonymous_session_connected, session_id, session_info})
end
@doc """
Broadcasts anonymous session disconnection event to admin panels.
"""
def broadcast_anonymous_session_disconnected(session_id) do
broadcast(@topic_presence, {:anonymous_session_disconnected, session_id})
end
@doc """
Broadcasts authenticated user session connection event to admin panels.
"""
def broadcast_user_session_connected(user_uuid, session_info) do
broadcast(@topic_presence, {:user_session_connected, user_uuid, session_info})
end
@doc """
Broadcasts authenticated user session disconnection event to admin panels.
"""
def broadcast_user_session_disconnected(user_uuid, session_id) do
broadcast(@topic_presence, {:user_session_disconnected, user_uuid, session_id})
end
@doc """
Broadcasts presence statistics update event to admin panels.
"""
def broadcast_presence_stats_updated(stats) do
broadcast(@topic_presence, {:presence_stats_updated, stats})
end
## Statistics Events
@doc """
Broadcasts statistics update event to admin dashboard.
"""
def broadcast_stats_updated do
stats = Roles.get_extended_stats()
broadcast(@topic_stats, {:stats_updated, stats})
end
## Permission Events
@doc """
Broadcasts permission granted event to admin panels.
"""
def broadcast_permission_granted(role_uuid, module_key) do
broadcast(@topic_permissions, {:permission_granted, role_uuid, module_key})
end
@doc """
Broadcasts permission revoked event to admin panels.
"""
def broadcast_permission_revoked(role_uuid, module_key) do
broadcast(@topic_permissions, {:permission_revoked, role_uuid, module_key})
end
@doc """
Broadcasts permissions synced event to admin panels.
"""
def broadcast_permissions_synced(role_uuid, module_keys) do
broadcast(@topic_permissions, {:permissions_synced, role_uuid, module_keys})
end
## Module Events
@doc """
Broadcasts module enabled event to admin panels.
"""
def broadcast_module_enabled(module_key) do
broadcast(@topic_modules, {:module_enabled, module_key})
end
@doc """
Broadcasts module disabled event to admin panels.
"""
def broadcast_module_disabled(module_key) do
broadcast(@topic_modules, {:module_disabled, module_key})
end
## Subscription Functions
@doc """
Subscribes to permission events for admin panels.
"""
def subscribe_to_permissions do
Manager.subscribe(@topic_permissions)
end
@doc """
Subscribes to user events for admin panels.
"""
def subscribe_to_users do
Manager.subscribe(@topic_users)
end
@doc """
Subscribes to role events for admin panels.
"""
def subscribe_to_roles do
Manager.subscribe(@topic_roles)
end
@doc """
Subscribes to session events for admin panels.
"""
def subscribe_to_sessions do
Manager.subscribe(@topic_sessions)
end
@doc """
Subscribes to presence events for admin panels.
"""
def subscribe_to_presence do
Manager.subscribe(@topic_presence)
end
@doc """
Subscribes to statistics events for admin dashboard.
"""
def subscribe_to_stats do
Manager.subscribe(@topic_stats)
end
@doc """
Subscribes to module events for admin panels.
"""
def subscribe_to_modules do
Manager.subscribe(@topic_modules)
end
@doc """
Subscribes to all admin events.
"""
def subscribe_to_all_admin_events do
subscribe_to_users()
subscribe_to_roles()
subscribe_to_sessions()
subscribe_to_presence()
subscribe_to_stats()
subscribe_to_permissions()
subscribe_to_modules()
end
## Private Functions
defp broadcast(topic, message) do
Manager.broadcast(topic, message)
end
# Safe version that doesn't crash if no repository configured
defp maybe_broadcast_stats_updated do
broadcast_stats_updated()
rescue
# No repository configured, skip stats
RuntimeError -> :ok
# Any other error, skip stats
_ -> :ok
end
end