Initial commit device-management
tests / ci (push) Has been cancelled

This commit is contained in:
Wian Drs
2026-08-25 09:42:00 +07:00
commit 1e80be180e
1159 changed files with 149545 additions and 0 deletions
@@ -0,0 +1,69 @@
<?php
use App\Enums\SystemRole;
use App\Models\User;
use App\Support\SystemRolePermissions;
use Illuminate\Database\Migrations\Migration;
use Illuminate\Support\Facades\DB;
use Spatie\Permission\Models\Permission;
use Spatie\Permission\Models\Role;
use Spatie\Permission\PermissionRegistrar;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
app(PermissionRegistrar::class)->forgetCachedPermissions();
setPermissionsTeamId(null);
$masterRole = Role::query()->whereNull('tenant_id')->firstOrCreate([
'name' => SystemRole::MasterAdmin->value,
'guard_name' => 'web',
]);
$masterRole->syncPermissions(Permission::all());
DB::table('tenants')->orderBy('id')->eachById(function (object $tenant): void {
setPermissionsTeamId($tenant->id);
$existingAdminIds = DB::table('model_has_roles')
->join('roles', 'roles.id', '=', 'model_has_roles.role_id')
->where('model_has_roles.tenant_id', $tenant->id)
->whereIn('roles.name', ['TENANT OWNER', SystemRole::TenantAdmin->value])
->pluck('model_has_roles.model_id');
$roles = [];
foreach (SystemRolePermissions::tenantRoles() as $name => $permissions) {
$role = Role::findOrCreate($name, 'web', $tenant->id);
$role->syncPermissions($permissions);
$roles[$name] = $role;
}
DB::table('model_has_roles')->where('tenant_id', $tenant->id)->delete();
User::withoutGlobalScope('tenant')->where('tenant_id', $tenant->id)->each(function (User $user) use ($existingAdminIds, $roles): void {
$role = $existingAdminIds->contains($user->id)
? $roles[SystemRole::TenantAdmin->value]
: $roles[SystemRole::TenantUser->value];
$user->assignRole($role);
});
Role::query()
->where('tenant_id', $tenant->id)
->whereNotIn('name', [SystemRole::TenantAdmin->value, SystemRole::TenantUser->value])
->delete();
});
Role::query()->whereNull('tenant_id')->where('name', 'SUPER ADMIN')->delete();
app(PermissionRegistrar::class)->forgetCachedPermissions();
}
/**
* Reverse the migrations.
*/
public function down(): void
{
// Standardizing security roles is intentionally irreversible.
}
};