users menu listing

This commit is contained in:
Mark Gregory
2026-08-26 08:20:59 +01:00
parent 31ee06fa3a
commit 381d58003d
8 changed files with 103 additions and 13 deletions
+1 -1
View File
@@ -27,7 +27,7 @@ final class Ticket extends Model
protected $table = 'helpdesk_tickets';
protected $with = ['user'];
protected $with = ['user', 'agent'];
/** @var list<string> */
protected $fillable = [
@@ -13,7 +13,7 @@ final class AutomationRuleService
/** @param array<string, mixed> $context */
public function apply(Ticket $ticket, array $context = []): Ticket
{
$sender = (string) ($context['sender'] ?? $ticket->owner?->email ?? '');
$sender = (string) ($context['sender'] ?? $ticket->user?->email ?? '');
$mailbox = (string) ($context['mailbox'] ?? '');
AutomationRule::query()
@@ -22,7 +22,7 @@ final class CannedResponseRenderer
'{{ ticket.category }}' => (string) ($ticket->category?->name ?? ''),
'{{ ticket.project }}' => (string) ($ticket->project?->title ?? ''),
'{{ ticket.team }}' => (string) ($ticket->team?->name ?? ''),
'{{ requester.name }}' => (string) ($ticket->owner?->name ?? ''),
'{{ requester.name }}' => (string) ($ticket->user?->name ?? ''),
'{{ agent.name }}' => (string) ($ticket->agent?->name ?? ''),
'{{ actor.name }}' => (string) ($actor?->name ?? ''),
'{{ ticket.url }}' => route('helpdesk.tickets.show', ['ticket' => $ticket->getKey()]),
@@ -0,0 +1,35 @@
<?php
declare(strict_types=1);
namespace Modules\UserManagement\Console;
use App\Models\User;
use Illuminate\Console\Command;
final class EnsureAdminCommand extends Command
{
protected $signature = 'users:ensure-admin {user=1 : User ID to grant administrator access}';
protected $description = 'Ensure a user has Helpdesk administrator and agent access';
public function handle(): int
{
$user = User::query()->find((int) $this->argument('user'));
if ($user === null) {
$this->error('User not found.');
return self::FAILURE;
}
$user->forceFill([
'helpdesk_admin' => true,
'helpdesk_agent' => true,
])->save();
$this->info("{$user->name} is now a Helpdesk administrator.");
return self::SUCCESS;
}
}
@@ -0,0 +1,42 @@
<?php
declare(strict_types=1);
use Illuminate\Database\Migrations\Migration;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
public function up(): void
{
if (
! Schema::hasTable('users')
|| ! Schema::hasColumn('users', 'helpdesk_admin')
|| ! Schema::hasColumn('users', 'helpdesk_agent')
) {
return;
}
if (DB::table('users')->where('helpdesk_admin', true)->exists()) {
return;
}
$userId = DB::table('users')->orderBy('id')->value('id');
if ($userId === null) {
return;
}
DB::table('users')->where('id', $userId)->update([
'helpdesk_admin' => true,
'helpdesk_agent' => true,
'updated_at' => now(),
]);
}
public function down(): void
{
// Never silently remove administrator access.
}
};
@@ -14,14 +14,15 @@ final class EnsureUserManagementAdmin
{
$user = $request->user();
$allowed = $user !== null && (
(method_exists($user, 'isHelpdeskAdmin') && $user->isHelpdeskAdmin())
|| (method_exists($user, 'isAdmin') && $user->isAdmin())
|| (bool) ($user->helpdesk_admin ?? false)
abort_unless(
$user !== null
&& (
(bool) ($user->helpdesk_admin ?? false)
|| (method_exists($user, 'isHelpdeskAdmin') && $user->isHelpdeskAdmin())
),
403
);
abort_unless($allowed, 403);
return $next($request);
}
}
@@ -5,6 +5,7 @@ declare(strict_types=1);
namespace Modules\UserManagement\Providers;
use Illuminate\Support\ServiceProvider;
use Modules\UserManagement\Console\EnsureAdminCommand;
final class UserManagementServiceProvider extends ServiceProvider
{
@@ -12,4 +13,15 @@ final class UserManagementServiceProvider extends ServiceProvider
{
$this->app->register(RouteServiceProvider::class);
}
public function boot(): void
{
$this->loadMigrationsFrom(module_path('UserManagement', 'Database/Migrations'));
if ($this->app->runningInConsole()) {
$this->commands([
EnsureAdminCommand::class,
]);
}
}
}
@@ -4,10 +4,10 @@
<body class="hd-app-body">
@php
$user = auth()->user();
$isAdmin =
(bool) ($user?->helpdesk_admin ?? false)
|| ($user && method_exists($user, 'isHelpdeskAdmin') && $user->isHelpdeskAdmin())
|| ($user && method_exists($user, 'isAdmin') && $user->isAdmin());
$isAdmin = $user !== null && (
(bool) ($user->helpdesk_admin ?? false)
|| (method_exists($user, 'isHelpdeskAdmin') && $user->isHelpdeskAdmin())
);
$roleLabel = $isAdmin ? 'Administrator' : ((method_exists($user, 'isHelpdeskAgent') && $user->isHelpdeskAgent()) || (bool) ($user->helpdesk_agent ?? false) ? 'Agent' : 'User');
@endphp
<div class="hd-app-shell" data-hd-shell>