From 64d4433aaaae5085ab50cebbac4e9c1acc4a7a35 Mon Sep 17 00:00:00 2001 From: walkor Date: Fri, 23 Dec 2022 16:34:37 +0800 Subject: [PATCH] save --- src/plugin/admin/app/common/Layui.php | 5 +- .../app/controller/AccountController.php | 11 ++-- .../admin/app/controller/AdminController.php | 62 ++++++++++++------- src/plugin/admin/app/functions.php | 5 ++ src/plugin/admin/app/model/Admin.php | 1 + src/plugin/admin/app/view/admin/index.html | 26 ++++++++ src/plugin/admin/app/view/user/index.html | 5 +- 7 files changed, 85 insertions(+), 30 deletions(-) diff --git a/src/plugin/admin/app/common/Layui.php b/src/plugin/admin/app/common/Layui.php index 85d29d4..5cd5abd 100644 --- a/src/plugin/admin/app/common/Layui.php +++ b/src/plugin/admin/app/common/Layui.php @@ -787,7 +787,10 @@ EOF; $.post(UPDATE_API, postData, function (res) { layer.close(load); if (res.code) { - return layui.popup.failure(res.msg); + return layui.popup.failure(res.msg, function () { + data.elem.checked = !data.elem.checked; + form.render(); + }); } return layui.popup.success("操作成功"); }) diff --git a/src/plugin/admin/app/controller/AccountController.php b/src/plugin/admin/app/controller/AccountController.php index 9d5e4a7..8bac5d2 100644 --- a/src/plugin/admin/app/controller/AccountController.php +++ b/src/plugin/admin/app/controller/AccountController.php @@ -73,6 +73,9 @@ class AccountController extends Crud if (!$admin || !Util::passwordVerify($password, $admin->password)) { return $this->json(1, '账户不存在或密码错误'); } + if ($admin->status != 0) { + return $this->json(1, '当前账户暂时无法登录'); + } $admin->login_at = date('Y-m-d H:i:s'); $admin->save(); $this->removeLoginLimit($username); @@ -109,14 +112,14 @@ class AccountController extends Crud return $this->json(1); } $info = [ + 'id' => $admin['id'], + 'username' => $admin['username'], 'nickname' => $admin['nickname'], 'avatar' => $admin['avatar'], - 'token' => $request->sessionId(), - 'userId' => $admin['id'], - 'username' => $admin['username'], 'email' => $admin['email'], 'mobile' => $admin['mobile'], - 'isSupperAdmin' => Auth::isSupperAdmin() + 'isSupperAdmin' => Auth::isSupperAdmin(), + 'token' => $request->sessionId(), ]; return $this->json(0, 'ok', $info); } diff --git a/src/plugin/admin/app/controller/AdminController.php b/src/plugin/admin/app/controller/AdminController.php index c253da6..835a6ca 100644 --- a/src/plugin/admin/app/controller/AdminController.php +++ b/src/plugin/admin/app/controller/AdminController.php @@ -125,38 +125,52 @@ class AdminController extends Crud public function update(Request $request): Response { if ($request->method() === 'POST') { - $role_ids = $request->post('roles'); + + [$id, $data] = $this->updateInput($request); $admin_id = $request->post('id'); if (!$admin_id) { return $this->json(1, '缺少参数'); } - $role_ids = $role_ids ? explode(',', $role_ids) : []; - if (!$role_ids) { - return $this->json(1, '至少选择一个角色组'); - } - $is_supper_admin = Auth::isSupperAdmin(); - $exist_role_ids = AdminRole::where('admin_id', $admin_id)->pluck('role_id')->toArray(); - $descendant_role_ids = Auth::getScopeRoleIds(); - if (!$is_supper_admin && !array_intersect($exist_role_ids, $descendant_role_ids)) { - return $this->json(1, '无权限更改该记录'); - } - if (!$is_supper_admin && array_diff($role_ids, $descendant_role_ids)) { - return $this->json(1, '角色超出权限范围'); + + // 不能禁用自己 + if (isset($data['status']) && $data['status'] == 1 && $id == admin_id()) { + return $this->json(1, '不能禁用自己'); } - // 删除 - $delete_ids = array_diff($exist_role_ids, $role_ids); - AdminRole::whereIn('role_id', $delete_ids)->where('admin_id', $admin_id)->delete(); - // 添加 - $add_ids = array_diff($role_ids, $exist_role_ids); - foreach ($add_ids as $id) { - $admin_role = new AdminRole; - $admin_role->admin_id = $admin_id; - $admin_role->role_id = $id; - $admin_role->save(); + // 需要更新角色 + if (key_exists('roles', $data)) { + $role_ids = $data['roles'] ? explode(',', $data['roles']) : []; + if (!$role_ids) { + return $this->json(1, '至少选择一个角色组'); + } + + $is_supper_admin = Auth::isSupperAdmin(); + $exist_role_ids = AdminRole::where('admin_id', $admin_id)->pluck('role_id')->toArray(); + $scope_role_ids = Auth::getScopeRoleIds(); + if (!$is_supper_admin && !array_intersect($exist_role_ids, $scope_role_ids)) { + return $this->json(1, '无权限更改该记录'); + } + if (!$is_supper_admin && array_diff($role_ids, $scope_role_ids)) { + return $this->json(1, '角色超出权限范围'); + } + + // 删除账户角色 + $delete_ids = array_diff($exist_role_ids, $role_ids); + AdminRole::whereIn('role_id', $delete_ids)->where('admin_id', $admin_id)->delete(); + // 添加账户角色 + $add_ids = array_diff($role_ids, $exist_role_ids); + foreach ($add_ids as $id) { + $admin_role = new AdminRole; + $admin_role->admin_id = $admin_id; + $admin_role->role_id = $id; + $admin_role->save(); + } } - return parent::update($request); + + $this->doUpdate($id, $data); + return $this->json(0); } + return view('admin/update'); } diff --git a/src/plugin/admin/app/functions.php b/src/plugin/admin/app/functions.php index 129db2a..47b0879 100644 --- a/src/plugin/admin/app/functions.php +++ b/src/plugin/admin/app/functions.php @@ -100,6 +100,11 @@ function refresh_admin_session(bool $force = false) } $admin = $admin->toArray(); unset($admin['password']); + // 账户被禁用 + if ($admin['status'] != 0) { + $session->forget('admin'); + return; + } $admin['roles'] = AdminRole::where('admin_id', $admin_id)->pluck('role_id')->toArray(); $admin['session_last_update_time'] = $time_now; $session->set('admin', $admin); diff --git a/src/plugin/admin/app/model/Admin.php b/src/plugin/admin/app/model/Admin.php index 10532d0..f55e932 100644 --- a/src/plugin/admin/app/model/Admin.php +++ b/src/plugin/admin/app/model/Admin.php @@ -16,6 +16,7 @@ use plugin\admin\app\model\Base; * @property string $updated_at 更新时间 * @property string $login_at 登录时间 * @property string $roles 角色 + * @property integer $status 状态 0正常 1禁用 */ class Admin extends Base { diff --git a/src/plugin/admin/app/view/admin/index.html b/src/plugin/admin/app/view/admin/index.html index 5ca8e70..924c8a4 100644 --- a/src/plugin/admin/app/view/admin/index.html +++ b/src/plugin/admin/app/view/admin/index.html @@ -183,6 +183,32 @@ return util.escape(items.join(",")); } },{ + title: "禁用", + field: "status", + templet: function (d) { + let field = "status"; + form.on("switch("+field+")", function (data) { + let load = layer.load(); + let postData = {}; + postData[field] = data.elem.checked ? 1 : 0; + postData[PRIMARY_KEY] = this.value; + $.post(UPDATE_API, postData, function (res) { + layer.close(load); + if (res.code) { + return layui.popup.failure(res.msg, function () { + data.elem.checked = !data.elem.checked; + form.render(); + }); + } + return layui.popup.success("操作成功"); + }) + }); + let checked = d[field] === 1 ? "checked" : ""; + if (parent.Admin.Account.id === d.id) return ''; + return ''; + }, + width: 90, + },{ title: "操作", toolbar: "#table-bar", align: "center", diff --git a/src/plugin/admin/app/view/user/index.html b/src/plugin/admin/app/view/user/index.html index 1639f2e..a3f7bb9 100644 --- a/src/plugin/admin/app/view/user/index.html +++ b/src/plugin/admin/app/view/user/index.html @@ -339,7 +339,10 @@ $.post(UPDATE_API, postData, function (res) { layer.close(load); if (res.code) { - return layui.popup.failure(res.msg); + return layui.popup.failure(res.msg, function () { + data.elem.checked = !data.elem.checked; + form.render(); + }); } return layui.popup.success("操作成功"); })