[FIX] 遷移機台授權為獨立模組:修復變數命名、補齊多語系並強化多租戶數據隔離
All checks were successful
star-cloud-deploy-demo / deploy-demo (push) Successful in 54s
All checks were successful
star-cloud-deploy-demo / deploy-demo (push) Successful in 54s
This commit is contained in:
@@ -0,0 +1,36 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
Schema::table('roles', function (Blueprint $table) {
|
||||
$table->boolean('is_admin')->default(false)->after('is_system');
|
||||
});
|
||||
|
||||
// 資料遷移:將所有租戶中名稱為「管理員」的角色標示為 is_admin = true
|
||||
// 這樣既有的授權篩選才不會斷掉
|
||||
DB::table('roles')
|
||||
->whereNotNull('company_id')
|
||||
->where('name', '管理員')
|
||||
->update(['is_admin' => true]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::table('roles', function (Blueprint $table) {
|
||||
$table->dropColumn('is_admin');
|
||||
});
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,57 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
// 1. 從 roles 移除 is_admin
|
||||
if (Schema::hasColumn('roles', 'is_admin')) {
|
||||
Schema::table('roles', function (Blueprint $table) {
|
||||
$table->dropColumn('is_admin');
|
||||
});
|
||||
}
|
||||
|
||||
// 2. 在 users 新增 is_admin
|
||||
Schema::table('users', function (Blueprint $table) {
|
||||
$table->boolean('is_admin')->default(false)->after('status');
|
||||
});
|
||||
|
||||
// 3. 資料遷移:針對現有租戶,將每一家公司最先建立的帳號(或是目前名稱為管理員角色的人)標記為 is_admin = true
|
||||
// 取得所有租戶公司 ID
|
||||
$companyIds = DB::table('companies')->pluck('id');
|
||||
|
||||
foreach ($companyIds as $companyId) {
|
||||
// 優先找該公司 ID 最小的 user (通常是第一個建立的)
|
||||
$userId = DB::table('users')
|
||||
->where('company_id', $companyId)
|
||||
->orderBy('id', 'asc')
|
||||
->value('id');
|
||||
|
||||
if ($userId) {
|
||||
DB::table('users')->where('id', $userId)->update(['is_admin' => true]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::table('users', function (Blueprint $table) {
|
||||
$table->dropColumn('is_admin');
|
||||
});
|
||||
|
||||
Schema::table('roles', function (Blueprint $table) {
|
||||
$table->boolean('is_admin')->default(false)->after('is_system');
|
||||
});
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,48 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
// 1. 先將所有已刪除帳號的 is_admin 全部歸零,確保不會標記在「看不到的人」身上
|
||||
DB::table('users')->whereNotNull('deleted_at')->update(['is_admin' => false]);
|
||||
|
||||
// 2. 針對每一家公司,重新撈取「目前還存活 (deleted_at is null)」的最早建立帳號
|
||||
$companyIds = DB::table('companies')->pluck('id');
|
||||
|
||||
foreach ($companyIds as $companyId) {
|
||||
// 找該公司中,目前 ID 最小且「尚未被刪除」的 User
|
||||
$userId = DB::table('users')
|
||||
->where('company_id', $companyId)
|
||||
->whereNull('deleted_at')
|
||||
->orderBy('id', 'asc')
|
||||
->value('id');
|
||||
|
||||
if ($userId) {
|
||||
// 將該帳號設為管理員,並確保該公司其它生存帳號如果是 true 的先清掉 (一對一標記)
|
||||
DB::table('users')
|
||||
->where('company_id', $companyId)
|
||||
->where('id', '!=', $userId)
|
||||
->update(['is_admin' => false]);
|
||||
|
||||
DB::table('users')->where('id', $userId)->update(['is_admin' => true]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
// 基本上這是資料修正,回復也不太有意義
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user