improvements
This commit is contained in:
+106
@@ -0,0 +1,106 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
public function up(): void
|
||||
{
|
||||
Schema::create('user_management_roles', function (Blueprint $table): void {
|
||||
$table->id();
|
||||
$table->string('name');
|
||||
$table->string('slug')->unique();
|
||||
$table->text('description')->nullable();
|
||||
$table->boolean('is_system')->default(false);
|
||||
$table->timestamps();
|
||||
});
|
||||
|
||||
Schema::create('user_management_permissions', function (Blueprint $table): void {
|
||||
$table->id();
|
||||
$table->string('name');
|
||||
$table->string('slug')->unique();
|
||||
$table->text('description')->nullable();
|
||||
$table->timestamps();
|
||||
});
|
||||
|
||||
Schema::create('user_management_role_user', function (Blueprint $table): void {
|
||||
$table->foreignId('role_id')->constrained('user_management_roles')->cascadeOnDelete();
|
||||
$table->foreignId('user_id')->constrained('users')->cascadeOnDelete();
|
||||
$table->primary(['role_id', 'user_id']);
|
||||
});
|
||||
|
||||
Schema::create('user_management_permission_role', function (Blueprint $table): void {
|
||||
$table->foreignId('permission_id')->constrained('user_management_permissions')->cascadeOnDelete();
|
||||
$table->foreignId('role_id')->constrained('user_management_roles')->cascadeOnDelete();
|
||||
$table->primary(['permission_id', 'role_id']);
|
||||
});
|
||||
|
||||
$now = now();
|
||||
|
||||
$adminRole = DB::table('user_management_roles')->insertGetId([
|
||||
'name' => 'Administrator',
|
||||
'slug' => 'administrator',
|
||||
'description' => 'Full application administration.',
|
||||
'is_system' => true,
|
||||
'created_at' => $now,
|
||||
'updated_at' => $now,
|
||||
]);
|
||||
|
||||
$agentRole = DB::table('user_management_roles')->insertGetId([
|
||||
'name' => 'Helpdesk Agent',
|
||||
'slug' => 'helpdesk-agent',
|
||||
'description' => 'Helpdesk workflow and ticket operations.',
|
||||
'is_system' => true,
|
||||
'created_at' => $now,
|
||||
'updated_at' => $now,
|
||||
]);
|
||||
|
||||
foreach ([
|
||||
['Manage users', 'users.manage'],
|
||||
['Manage roles', 'roles.manage'],
|
||||
['Manage permissions', 'permissions.manage'],
|
||||
['Manage helpdesk', 'helpdesk.manage'],
|
||||
['Manage documentation', 'documentation.manage'],
|
||||
] as [$name, $slug]) {
|
||||
$permissionId = DB::table('user_management_permissions')->insertGetId([
|
||||
'name' => $name,
|
||||
'slug' => $slug,
|
||||
'created_at' => $now,
|
||||
'updated_at' => $now,
|
||||
]);
|
||||
|
||||
DB::table('user_management_permission_role')->insert([
|
||||
'permission_id' => $permissionId,
|
||||
'role_id' => $adminRole,
|
||||
]);
|
||||
|
||||
if ($slug === 'helpdesk.manage') {
|
||||
DB::table('user_management_permission_role')->insert([
|
||||
'permission_id' => $permissionId,
|
||||
'role_id' => $agentRole,
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
foreach (DB::table('users')->where('helpdesk_admin', true)->pluck('id') as $userId) {
|
||||
DB::table('user_management_role_user')->insertOrIgnore(['role_id' => $adminRole, 'user_id' => $userId]);
|
||||
}
|
||||
|
||||
foreach (DB::table('users')->where('helpdesk_agent', true)->where('helpdesk_admin', false)->pluck('id') as $userId) {
|
||||
DB::table('user_management_role_user')->insertOrIgnore(['role_id' => $agentRole, 'user_id' => $userId]);
|
||||
}
|
||||
}
|
||||
|
||||
public function down(): void
|
||||
{
|
||||
Schema::dropIfExists('user_management_permission_role');
|
||||
Schema::dropIfExists('user_management_role_user');
|
||||
Schema::dropIfExists('user_management_permissions');
|
||||
Schema::dropIfExists('user_management_roles');
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user