Skip to main content

Users and Organizations

Users, organizations, social sign-in and supervisor assignments. Cloudonix credentials are on CloudonixSettings.

User​

A user account. Every user belongs to one organization.

Table: users
Model: App\Models\User (extends User)
Tenant scoped: yes (OrganizationScope)
Traits: HasApiTokens, Notifiable

ColumnTypeNullableDefaultDescription
idbigint unsignedNoautoPrimary key
organization_idbigint unsignedNo-Tenant. Foreign key to organizations, on delete cascade
namevarchar(255)No-Full name
emailvarchar(255)No-Email, unique across the platform
phonevarchar(20)YesnullPhone
street_addresstextYesnullAddress
cityvarchar(100)YesnullCity
state_provincevarchar(100)YesnullState or province
postal_codevarchar(20)YesnullPostal code
countryvarchar(100)YesnullCountry
roleenumNo-Role in the organization. Values: owner, pbx_admin, pbx_user, reporter, supervisor (cast to UserRole)
is_platform_managerbooleanNofalsePlatform manager (cross-tenant administration)
statusenumNoactiveAccount state. Values: active, inactive, pending (cast to UserStatus)
email_verified_attimestampYesnullWhen the email was verified
passwordvarchar(255)YesnullPassword hash. Null for users who only sign in through Auth0 (hashed cast)
password_reset_requiredbooleanNofalseMust change the password at next sign-in
password_last_changed_attimestampYesnullWhen the password was last changed (used by the password-age policy command)
remember_tokenvarchar(100)YesnullRemember-me token
created_attimestampYesnull
updated_attimestampYesnull

Indexes

  • idx_users_is_platform_manager: is_platform_manager
  • users_email_index: email
  • users_email_unique (unique): email
  • users_organization_id_status_index: organization_id, status

Hidden from serialization: password, remember_token
Not mass assignable: is_platform_manager, email_verified_at, password_reset_required, password_last_changed_at, remember_token

Relationships

$user->organization() → Organization (organization_id) [BelongsTo]
$user->socialIdentities() → UserSocialIdentity (user_id) [HasMany]
$user->extension() → Extension (user_id) [HasOne]
$user->embedToken() → UserEmbedToken (user_id) [HasOne]
$user->supervisedUsers() → User (pivot supervisor_user_assignments) [BelongsToMany]
$user->supervisingSupervisors() → User (pivot supervisor_user_assignments) [BelongsToMany]
$user->supervisedRingGroups() → RingGroup (pivot supervisor_ring_group_assignments) [BelongsToMany]
$user->platformAuditLogs() → PlatformAuditLog (platform_manager_user_id) [HasMany]

Scopes: forOrganization(), withRole(), withStatus(), search()
Methods: hasRole(), isOwner(), isPBXAdmin(), isPBXUser(), isReporter(), isSupervisor(), isAssignableAsSupervisor(), isInactive(), isPlatformManager(), revokeAllTokens(), canManageUser(), isActive(), isPending()

is_platform_manager and password_reset_required are not mass assignable. The supervisor_user_assignments and supervisor_ring_group_assignments pivots (below) back supervisedUsers(), supervisingSupervisors() and supervisedRingGroups().

supervisor_user_assignments​

Users a supervisor may monitor.

Table: supervisor_user_assignments (no Eloquent model)

ColumnTypeNullableDefaultDescription
idbigint unsignedNoautoPrimary key
supervisor_idbigint unsignedNo-Supervisor user. Foreign key to users, on delete cascade
user_idbigint unsignedNo-Supervised user. Foreign key to users, on delete cascade
organization_idbigint unsignedNo-Tenant. Foreign key to organizations, on delete cascade
created_attimestampYesnull
updated_attimestampYesnull

Indexes

  • supervisor_user_assignments_organization_id_supervisor_id_index: organization_id, supervisor_id
  • supervisor_user_assignments_supervisor_id_user_id_unique (unique): supervisor_id, user_id
  • supervisor_user_assignments_user_id_foreign: user_id

supervisor_ring_group_assignments​

Ring groups a supervisor may monitor.

Table: supervisor_ring_group_assignments (no Eloquent model)

ColumnTypeNullableDefaultDescription
idbigint unsignedNoautoPrimary key
supervisor_idbigint unsignedNo-Supervisor user. Foreign key to users, on delete cascade
ring_group_idbigint unsignedNo-Ring group. Foreign key to ring_groups, on delete cascade
organization_idbigint unsignedNo-Tenant. Foreign key to organizations, on delete cascade
created_attimestampYesnull
updated_attimestampYesnull

Indexes

  • supervisor_ring_group_assignments_ring_group_id_foreign: ring_group_id
  • supervisor_ring_group_org_idx: organization_id, supervisor_id
  • supervisor_ring_group_unique (unique): supervisor_id, ring_group_id

Organization​

A tenant. All tenant data references an organization and is deleted with it.

Table: organizations
Model: App\Models\Organization
Tenant scoped: no
Traits: SoftDeletes

ColumnTypeNullableDefaultDescription
idbigint unsignedNoautoPrimary key
namevarchar(255)No-Organization name
slugvarchar(255)No-Unique slug
statusenumNoactiveactive, suspended or deleted. Suspended and deleted organizations are refused by the tenant.scope middleware. Values: active, suspended, deleted
public_queues_tokenchar(36)YesnullUnguessable token for the public call-queue wallboard (/api/v1/public/queues-dashboard/{token}/...)
timezonevarchar(255)NoUTCDefault time zone
settingsjsonYesnullOrganization settings
created_attimestampYesnull
updated_attimestampYesnull
deleted_attimestampYesnullSoft-delete timestamp

Indexes

  • organizations_created_at_index: created_at
  • organizations_public_queues_token_unique (unique): public_queues_token
  • organizations_slug_unique (unique): slug
  • organizations_status_index: status

Casts: settings (array)
Not mass assignable: public_queues_token

Relationships

$organization->users() → User (organization_id) [HasMany]
$organization->extensions() → Extension (organization_id) [HasMany]
$organization->didNumbers() → DidNumber (organization_id) [HasMany]
$organization->ringGroups() → RingGroup (organization_id) [HasMany]
$organization->businessHoursSchedules() → BusinessHoursSchedule (organization_id) [HasMany]
$organization->callLogs() → CallLog (organization_id) [HasMany]
$organization->cloudonixSettings() → CloudonixSettings (organization_id) [HasOne]

Methods: isActive()

status is not cast to OrganizationStatus. The model is not tenant scoped.

OrganizationJoinRequest​

A request from a person who signed in with a social identity to join an organization.

Table: organization_join_requests
Model: App\Models\OrganizationJoinRequest
Tenant scoped: yes (OrganizationScope)
Traits: SoftDeletes

ColumnTypeNullableDefaultDescription
idbigint unsignedNoautoPrimary key
organization_idbigint unsignedNo-Tenant. Foreign key to organizations, on delete cascade
emailvarchar(255)No-Requester email
namevarchar(255)YesnullRequester name
providervarchar(32)No-Identity provider (cast to SocialIdentityProvider)
provider_subjectvarchar(255)No-Subject ID at the provider
statusvarchar(32)NopendingRequest state (cast to OrganizationJoinRequestStatus)
rolevarchar(32)Nopbx_userRole granted on approval
created_attimestampYesnull
updated_attimestampYesnull
deleted_attimestampYesnullSoft-delete timestamp

Indexes

  • organization_join_requests_organization_id_email_status_unique (unique): organization_id, email, status
  • organization_join_requests_organization_id_status_index: organization_id, status

Relationships

$organizationJoinRequest->organization() → Organization (organization_id) [BelongsTo]

Unique on (organization_id, email, status).

UserSocialIdentity​

A social identity (through Auth0) linked to a user.

Table: user_social_identities
Model: App\Models\UserSocialIdentity
Tenant scoped: no

ColumnTypeNullableDefaultDescription
idbigint unsignedNoautoPrimary key
user_idbigint unsignedNo-User. Foreign key to users, on delete cascade
providervarchar(32)No-Identity provider (cast to SocialIdentityProvider)
provider_subjectvarchar(255)No-Subject ID at the provider
provider_emailvarchar(255)YesnullEmail reported by the provider
provider_datajsonYesnullRaw profile data
created_attimestampYesnull
updated_attimestampYesnull

Indexes

  • user_social_identities_provider_email_index: provider_email
  • user_social_identities_provider_provider_subject_unique (unique): provider, provider_subject
  • user_social_identities_user_id_provider_unique (unique): user_id, provider

Casts: provider_data (array)

Relationships

$userSocialIdentity->user() → User (user_id) [BelongsTo]

Unique on (provider, provider_subject) and on (user_id, provider): one identity per provider per user.

UserEmbedToken​

The token that lets a user's embeddable dialer call the API. One per user.

Table: user_embed_tokens
Model: App\Models\UserEmbedToken
Tenant scoped: yes (OrganizationScope)

ColumnTypeNullableDefaultDescription
idbigint unsignedNoautoPrimary key
user_idbigint unsignedNo-User (unique). Foreign key to users, on delete cascade
organization_idbigint unsignedNo-Tenant. Foreign key to organizations, on delete cascade
tokenvarchar(64)No-SHA-256 hash of the opbxd_ token; the plain token is shown once
icon_positionvarchar(255)Nobottom-rightLauncher icon position (cast to EmbedIconPosition)
icon_background_colorvarchar(255)No#007accLauncher icon color
last_used_attimestampYesnullLast use, updated at most every 5 seconds
created_attimestampYesnull
updated_attimestampYesnull

Indexes

  • user_embed_tokens_organization_id_index: organization_id
  • user_embed_tokens_token_unique (unique): token
  • user_embed_tokens_user_id_unique (unique): user_id

Hidden from serialization: token

Relationships

$userEmbedToken->user() → User (user_id) [BelongsTo]
$userEmbedToken->organization() → Organization (organization_id) [BelongsTo]