$params['name'], 'account' => $params['account'], 'avatar' => $avatar, 'password' => $password, 'create_time' => time(), 'disable' => $params['disable'], 'multipoint_login' => $params['multipoint_login'], 'org_id' => $params['org_id'], 'dept_id' => $params['dept_id'], 'job_id' => $params['job_id'], ]); // 角色 self::insertRole($admin['id'], $params['role_id'] ?? []); Db::commit(); return true; } catch (\Exception $e) { Db::rollback(); self::setError($e->getMessage()); return false; } } /** * @notes 编辑管理员 * @param array $params * @return bool * @author 段誉 * @date 2021/12/29 10:43 */ public static function edit(array $params): bool { Db::startTrans(); try { // 基础信息 $data = [ 'id' => $params['id'], 'name' => $params['name'], 'account' => $params['account'], 'disable' => $params['disable'], 'multipoint_login' => $params['multipoint_login'], 'org_id' => $params['org_id'], 'dept_id' => $params['dept_id'], 'job_id' => $params['job_id'], ]; // 头像 $data['avatar'] = !empty($params['avatar']) ? FileService::setFileUrl($params['avatar']) : ''; // 密码 if (!empty($params['password'])) { $passwordSalt = Config::get('project.unique_identification'); $data['password'] = create_password($params['password'], $passwordSalt); } // 禁用或更换角色后.设置token过期 $roleId = AdminRole::where('admin_id', $params['id'])->column('role_id'); $editRole = false; if (!empty(array_diff_assoc($roleId, $params['role_id']))) { $editRole = true; } if ($params['disable'] == 1 || $editRole) { $tokenArr = AdminSession::where('admin_id', $params['id'])->select()->toArray(); foreach ($tokenArr as $token) { self::expireToken($token['token']); } } Admin::update($data); (new AdminAuthCache($params['id']))->clearAuthCache(); // 删除旧的关联信息 AdminRole::delByUserId($params['id']); // 角色 self::insertRole($params['id'], $params['role_id']); Db::commit(); return true; } catch (\Exception $e) { Db::rollback(); self::setError($e->getMessage()); return false; } } /** * @notes 删除管理员 * @param array $params * @return bool * @author 段誉 * @date 2021/12/29 10:45 */ public static function delete(array $params): bool { Db::startTrans(); try { $admin = Admin::findOrEmpty($params['id']); if ($admin->root == YesNoEnum::YES) { throw new \Exception("超级管理员不允许被删除"); } Admin::destroy($params['id']); //设置token过期 $tokenArr = AdminSession::where('admin_id', $params['id'])->select()->toArray(); foreach ($tokenArr as $token) { self::expireToken($token['token']); } (new AdminAuthCache($params['id']))->clearAuthCache(); // 删除旧的关联信息 AdminRole::delByUserId($params['id']); Db::commit(); return true; } catch (\Exception $e) { Db::rollback(); self::setError($e->getMessage()); return false; } } /** * @notes 过期token * @param $token * @return bool * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\DbException * @throws \think\db\exception\ModelNotFoundException * @author 段誉 * @date 2021/12/29 10:46 */ public static function expireToken($token): bool { $adminSession = AdminSession::where('token', '=', $token) ->with('admin') ->find(); if (empty($adminSession)) { return false; } $time = time(); $adminSession->expire_time = $time; $adminSession->update_time = $time; $adminSession->save(); return (new AdminTokenCache())->deleteAdminInfo($token); } /** * @notes 查看管理员详情 * @param $params * @return array * @author 段誉 * @date 2021/12/29 11:07 */ public static function detail($params, $action = 'detail'): array { $admin = Admin::field([ 'id', 'account', 'name', 'disable', 'root', 'org_id', 'dept_id', 'job_id', 'multipoint_login', 'avatar', ])->findOrEmpty($params['id'])->toArray(); $job = Jobs::field('name')->where('id',$admin['job_id'])->findOrEmpty(); $dept = Dept::field('name')->where('id',$admin['dept_id'])->findOrEmpty(); $org = Orgs::field('name')->where('id',$admin['org_id'])->findOrEmpty(); $admin['job_name'] = $job->isEmpty() ? '' : $job['name']; $admin['dept_name'] = $dept->isEmpty() ? '' : $dept['name']; $admin['org_name'] = $org->isEmpty() ? '' : $org['name']; if ($action == 'detail') { return $admin; } $result['user'] = $admin; // 当前管理员角色拥有的菜单 $result['menu'] = MenuLogic::getMenuByAdminId($params['id'],false); $result['top_menu'] = MenuLogic::getMenuByAdminId($params['id'],true); // 当前管理员橘色拥有的按钮权限 $result['permissions'] = AuthLogic::getBtnAuthByRoleId($admin); return $result; } /** * @notes 编辑超级管理员 * @param $params * @return Admin * @author 段誉 * @date 2022/4/8 17:54 */ public static function editSelf($params) { $data = [ 'id' => $params['admin_id'], 'name' => $params['name'], 'avatar' => FileService::setFileUrl($params['avatar']), ]; if (!empty($params['password'])) { $passwordSalt = Config::get('project.unique_identification'); $data['password'] = create_password($params['password'], $passwordSalt); } return Admin::update($data); } /** * @notes 新增角色 * @param $adminId * @param $roleIds * @throws \Exception * @author 段誉 * @date 2022/11/25 14:23 */ public static function insertRole($adminId, $roleIds) { if (!empty($roleIds)) { // 角色 $roleData = []; foreach ($roleIds as $roleId) { $roleData[] = [ 'admin_id' => $adminId, 'role_id' => $roleId, ]; } (new AdminRole())->saveAll($roleData); } } }