Users & Roles

Manage admin accounts, assign roles, and configure permissions.

Users

RouteMethodPurpose
/admin/usersGETList users (paginated, searchable, role filter)
/admin/users/createGETNew user form
/admin/usersPOSTCreate user
/admin/users/{user}/editGETEdit user form
/admin/users/{user}PUTUpdate user
/admin/users/{user}DELETESoft delete user

Fields

Roles

RouteMethodPurpose
/admin/rolesGETList roles
/admin/roles/createGETNew role form
/admin/rolesPOSTCreate role
/admin/roles/{role}/editGETEdit role form (permission matrix)
/admin/roles/{role}PUTUpdate role + permissions
/admin/roles/{role}DELETEDelete role (only if no users assigned)

Permission matrix

Permissions are stored as a JSON map on roles.permissions, with one boolean per ability:

{
  "users.view":          true,
  "users.create":        true,
  "users.update":        true,
  "users.delete":        false,

  "content.view":        true,
  "content.create":      true,
  "content.publish":     true,
  "content.delete":      false,

  "media.view":          true,
  "media.upload":        true,
  "media.delete":        false,

  "settings.manage":     false,
  "api-keys.manage":     false,
  "webhooks.manage":     false,
  "languages.manage":    false,
  "activity.view":       true
}

Checking permissions

// In controller
if (! auth()->user()->can('content.publish')) {
    abort(403);
}

// In Blade
@can('media.delete')
    <button class="text-red-600">Delete</button>
@endcan

Default roles

Cascade behaviorDeleting a user soft-deletes; pivot rows in user_roles are removed via observer to avoid orphans. Deleting a role is blocked if any user has it assigned — reassign first.