Packages
phoenix_kit
1.7.34
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/audit_log/entry.ex
defmodule PhoenixKit.AuditLog.Entry do
@moduledoc """
Schema for audit log entries.
Tracks administrative actions performed in PhoenixKit, providing a complete
audit trail of sensitive operations.
## Fields
* `target_user_id` - The ID of the user affected by the action
* `admin_user_id` - The ID of the admin who performed the action
* `action` - The type of action performed (e.g., "admin_password_reset")
* `ip_address` - The IP address from which the action was performed
* `user_agent` - The user agent string of the client
* `metadata` - Additional metadata about the action (JSONB)
* `inserted_at` - Timestamp when the log entry was created
"""
use Ecto.Schema
import Ecto.Changeset
@type t :: %__MODULE__{
id: integer() | nil,
target_user_id: integer(),
admin_user_id: integer(),
action: String.t(),
ip_address: String.t() | nil,
user_agent: String.t() | nil,
metadata: map() | nil,
inserted_at: DateTime.t() | nil
}
@valid_actions [
"admin_password_reset",
"user_created",
"user_updated",
"user_deleted",
"user_confirmed",
"user_locked",
"user_unlocked",
"role_assigned",
"role_revoked"
]
schema "phoenix_kit_audit_logs" do
field :uuid, Ecto.UUID, read_after_writes: true
field :target_user_id, :integer
field :admin_user_id, :integer
field :action, :string
field :ip_address, :string
field :user_agent, :string
field :metadata, :map
timestamps(type: :utc_datetime_usec, updated_at: false)
end
@doc """
Creates a changeset for audit log entry.
## Required Fields
* `:target_user_id` - ID of the affected user
* `:admin_user_id` - ID of the admin performing the action
* `:action` - Type of action performed
## Optional Fields
* `:ip_address` - IP address of the admin
* `:user_agent` - User agent string
* `:metadata` - Additional metadata (JSONB)
"""
def changeset(entry, attrs) do
entry
|> cast(attrs, [:target_user_id, :admin_user_id, :action, :ip_address, :user_agent, :metadata])
|> validate_required([:target_user_id, :admin_user_id, :action])
|> validate_inclusion(:action, @valid_actions)
|> validate_user_ids()
end
# Validate that user IDs are positive integers
defp validate_user_ids(changeset) do
changeset
|> validate_number(:target_user_id, greater_than: 0)
|> validate_number(:admin_user_id, greater_than: 0)
end
@doc """
Returns the list of valid action types.
"""
def valid_actions, do: @valid_actions
end