From 6767e96919583812cc1ccc4695e5a6458a24312a Mon Sep 17 00:00:00 2001 From: wanghongjun <1445693971@qq.com> Date: Fri, 15 May 2026 10:00:43 +0800 Subject: [PATCH] =?UTF-8?q?=E9=99=90=E5=88=B6=E8=B6=85=E7=BA=A7=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E5=91=98=20=E8=A7=92=E8=89=B2=20=E4=B8=8D=E5=8F=AF?= =?UTF-8?q?=E7=BC=96=E8=BE=91=E5=88=A0=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/Admin/RolesController.php | 6 +- app/Http/Controllers/Admin/UserController.php | 1 + app/Models/AdminRoles.php | 5 ++ app/Models/AdminUsers.php | 5 ++ app/Services/AdminRolesService.php | 6 ++ database/seeders/AdminUsersSeeder.php | 82 ++++++++++++++++--- resources/lang/en/service.php | 2 + resources/lang/zh-CN/service.php | 2 + resources/lang/zh-TW/service.php | 2 + 9 files changed, 100 insertions(+), 11 deletions(-) diff --git a/app/Http/Controllers/Admin/RolesController.php b/app/Http/Controllers/Admin/RolesController.php index 87ea4c4..86c1743 100644 --- a/app/Http/Controllers/Admin/RolesController.php +++ b/app/Http/Controllers/Admin/RolesController.php @@ -49,7 +49,11 @@ class RolesController extends BaseController $perPage = $request->input('per_page', 10); $total = $query->count(); - $items = $query->latest()->forPage($page, $perPage)->get(); + $items = $query->latest()->forPage($page, $perPage)->get() + ->each(function ($item) { + $item['non-operable'] = $item['name'] == '超级管理员' ? 1 : 0; + return $item; + }); return $this->responseService->success([ 'items' => $items, diff --git a/app/Http/Controllers/Admin/UserController.php b/app/Http/Controllers/Admin/UserController.php index b11558f..8a142ef 100644 --- a/app/Http/Controllers/Admin/UserController.php +++ b/app/Http/Controllers/Admin/UserController.php @@ -58,6 +58,7 @@ class UserController extends BaseController $total = $query->count(); $items = $query->latest()->forPage($page, $perPage)->get()->each( function ($item) { + $item['non-operable'] = $item['username'] == 'Admin' ? 1 : 0; return $this->AdminUserModelService->optionItem($item); } ); diff --git a/app/Models/AdminRoles.php b/app/Models/AdminRoles.php index 7cee629..3b2630e 100644 --- a/app/Models/AdminRoles.php +++ b/app/Models/AdminRoles.php @@ -62,4 +62,9 @@ class AdminRoles extends Model 'menu_id' ); } + + public function getCreatedAtAttribute($value): string + { + return $value ? get_datetime('datetime', strtotime($value)) : ''; + } } diff --git a/app/Models/AdminUsers.php b/app/Models/AdminUsers.php index f1ac84a..ad03ca3 100644 --- a/app/Models/AdminUsers.php +++ b/app/Models/AdminUsers.php @@ -59,6 +59,11 @@ class AdminUsers extends Model return $this->belongsToMany(AdminRoles::class, AdminRoleUsers::class, 'user_id', 'role_id'); } + public function getCreatedAtAttribute($value): string + { + return $value ? get_datetime('datetime', strtotime($value)) : ''; + } + /** * @param $user_id * @return mixed diff --git a/app/Services/AdminRolesService.php b/app/Services/AdminRolesService.php index 14a0998..8b5c1ec 100644 --- a/app/Services/AdminRolesService.php +++ b/app/Services/AdminRolesService.php @@ -50,6 +50,9 @@ final class AdminRolesService // 更新 $model = AdminRoles::query()->findOrFail($id); $oldValues = $model->toArray(); + if ($oldValues['name'] == '超级管理员') { + throw new Exception(__('service.admin_role.not_edit')); + } $model->update([ 'name' => $data['name'], @@ -178,6 +181,9 @@ final class AdminRolesService DB::beginTransaction(); $model = AdminRoles::query()->findOrFail($id); + if ($model['name'] == '超级管理员') { + throw new Exception(__('service.admin_role.not_delete')); + } $this->logService->logDeleted($model, 'role.delete'); diff --git a/database/seeders/AdminUsersSeeder.php b/database/seeders/AdminUsersSeeder.php index 7c5654d..641cb99 100644 --- a/database/seeders/AdminUsersSeeder.php +++ b/database/seeders/AdminUsersSeeder.php @@ -9,20 +9,82 @@ use Illuminate\Support\Str; class AdminUsersSeeder extends Seeder { + private string $username = 'Admin'; + private string $password = '12345678'; + private string $roleName = '超级管理员'; + /** * Run the database seeds. */ public function run(): void { - // - DB::table('admin_users')->insert( - [ - 'username' => 'Admin', - 'name' => 'Admin', - 'email' => fake()->unique()->safeEmail(), - 'password' => Hash::make('12345678'), // password - 'remember_token' => Str::random(10) - ] - ); + $user_id = DB::table('admin_users')->where('username', $this->username) + ->value('id'); + $role_id = DB::table('admin_roles')->where('name', $this->roleName) + ->value('id'); + if (!$user_id) { + DB::table('admin_users')->insert( + [ + 'username' => $this->username, + 'name' => $this->username, + 'email' => fake()->unique()->safeEmail(), + 'password' => Hash::make($this->password), // password + 'remember_token' => Str::random(10), + 'packing_id' => 1, + 'created_at' => date("Y-m-d H:i:s", time()) + ] + ); + $user_id = DB::table('admin_users')->where( + 'username', + $this->username + ) + ->value('id'); + } + if (!$role_id) { + DB::table('admin_roles')->insert( + [ + 'name' => $this->roleName, + 'remark' => "Super Administrator", + 'status' => 1, // password + 'level' => 1, + 'created_at' => date("Y-m-d H:i:s", time()), + 'updated_at' => date("Y-m-d H:i:s", time()) + ] + ); + $role_id = DB::table('admin_roles')->where('name', $this->roleName) + ->value('id'); + } + $this->superAdminSettingRole($user_id, $role_id); + $this->settingRoleMenu($role_id); + } + + private function superAdminSettingRole($user_id, $role_id) + { + // 超级管理员自动获取所有权限 + DB::table('admin_role_users')->insert([ + 'role_id' => $role_id, + 'user_id' => $user_id, + 'created_at' => date("Y-m-d H:i:s", time()), + 'updated_at' => date("Y-m-d H:i:s", time()) + ]); + } + + private function settingRoleMenu($role_id) + { + $menu_ids = DB::table('admin_menu')->where('status', 1)->pluck('id'); + $values = []; + foreach ($menu_ids as $menu_id) { + $values[] = [ + 'role_id' => $role_id, + 'menu_id' => $menu_id, + 'created_at' => date("Y-m-d H:i:s", time()), + 'updated_at' => date("Y-m-d H:i:s", time()) + ]; + } + $exists = DB::table('admin_role_menu')->where('role_id', $role_id) + ->whereIn('menu_id', $menu_ids)->exists(); + if ($values && !$exists) { + DB::table('admin_role_menu')->insert($values); + } } } diff --git a/resources/lang/en/service.php b/resources/lang/en/service.php index cb442dc..4c9b2b2 100644 --- a/resources/lang/en/service.php +++ b/resources/lang/en/service.php @@ -2,6 +2,8 @@ return [ 'admin_role' => [ + 'not_edit' => 'Super administrator cannot be edited', + 'not_delete' => 'Super administrator cannot be deleted', 'name_exists' => 'The role name already exists', 'menu_error' => 'The role number parameter is incorrect' ], diff --git a/resources/lang/zh-CN/service.php b/resources/lang/zh-CN/service.php index 8d3e648..11cf320 100644 --- a/resources/lang/zh-CN/service.php +++ b/resources/lang/zh-CN/service.php @@ -2,6 +2,8 @@ return [ 'admin_role' => [ + 'not_edit' => '超级管理员不可编辑', + 'not_delete' => '超级管理员不可删除', 'name_exists' => '角色名称已存在', 'menu_error' => '角色编号参数有误' ], diff --git a/resources/lang/zh-TW/service.php b/resources/lang/zh-TW/service.php index 9f47354..b90adac 100644 --- a/resources/lang/zh-TW/service.php +++ b/resources/lang/zh-TW/service.php @@ -2,6 +2,8 @@ return [ 'admin_role' => [ + 'not_edit' => '超級管理員不可編輯', + 'not_delete' => '超級管理員不可刪除', 'name_exists' => '角色名稱已存在', 'menu_error' => '角色編號參數有誤' ],