request->adminInfo ?? []); if (empty($identity) || empty($identity['admin_id'])) { return $this->fail('登录已失效,请重新登录'); } if ((int)($identity['terminal'] ?? 0) !== AdminTerminalEnum::WECOM_RPA) { return $this->fail('当前登录令牌不属于企业微信客服桌面端'); } $admin = Admin::where(['id' => (int)$identity['admin_id']]) ->field('id,account,name,avatar,disable,root') ->findOrEmpty(); if ($admin->isEmpty() || (int)$admin['disable'] === YesNoEnum::YES) { return $this->fail('管理员不存在或已禁用'); } // 身份和权限在专用接口一次返回,客服后台无需跨 IP 调用网页端 mySelf。 $roleIds = array_values(array_unique(array_map('intval', AdminRole::where('admin_id', (int)$admin['id'])->column('role_id') ))); sort($roleIds); $permissions = AuthLogic::getBtnAuthByRoleId([ 'id' => (int)$admin['id'], 'root' => (int)$admin['root'], 'role_id' => $roleIds, ]); $account = trim((string)$admin['account']); $name = trim((string)$admin['name']); return $this->data([ // 加类型前缀,避免管理员 id 与普通用户 id 相同时落到同一个客服租户。 'user_id' => 'admin:' . (int)$admin['id'], 'sn' => $account, 'nickname' => $name !== '' ? $name : $account, 'mobile' => '', 'avatar' => (string)$admin['avatar'], 'terminal' => AdminTerminalEnum::WECOM_RPA, 'expire_time' => (int)($identity['expire_time'] ?? 0), 'status' => 'active', 'account_type' => 'admin', 'root' => (int)$admin['root'] === YesNoEnum::YES, 'role_ids' => $roleIds, 'permissions' => array_values($permissions), ]); } }