Browse Source

限制超级管理员 角色 不可编辑删除

master
wanghongjun 1 month ago
parent
commit
6767e96919
  1. 6
      app/Http/Controllers/Admin/RolesController.php
  2. 1
      app/Http/Controllers/Admin/UserController.php
  3. 5
      app/Models/AdminRoles.php
  4. 5
      app/Models/AdminUsers.php
  5. 6
      app/Services/AdminRolesService.php
  6. 82
      database/seeders/AdminUsersSeeder.php
  7. 2
      resources/lang/en/service.php
  8. 2
      resources/lang/zh-CN/service.php
  9. 2
      resources/lang/zh-TW/service.php

6
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,

1
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);
}
);

5
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)) : '';
}
}

5
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

6
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');

82
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);
}
}
}

2
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'
],

2
resources/lang/zh-CN/service.php

@ -2,6 +2,8 @@
return [
'admin_role' => [
'not_edit' => '超级管理员不可编辑',
'not_delete' => '超级管理员不可删除',
'name_exists' => '角色名称已存在',
'menu_error' => '角色编号参数有误'
],

2
resources/lang/zh-TW/service.php

@ -2,6 +2,8 @@
return [
'admin_role' => [
'not_edit' => '超級管理員不可編輯',
'not_delete' => '超級管理員不可刪除',
'name_exists' => '角色名稱已存在',
'menu_error' => '角色編號參數有誤'
],

Loading…
Cancel
Save