更新
This commit is contained in:
@@ -21,6 +21,7 @@ use app\common\service\pharmacy\PharmacyUploadPermissionAlias;
|
||||
use app\common\service\qywx\QywxPromotionOperatorAccess;
|
||||
use app\common\{
|
||||
cache\AdminAuthCache,
|
||||
enum\AdminTerminalEnum,
|
||||
service\JsonService
|
||||
};
|
||||
use think\helper\Str;
|
||||
@@ -47,7 +48,13 @@ class AuthMiddleware
|
||||
return $next($request);
|
||||
}
|
||||
|
||||
if ($request->adminInfo['login_ip'] != request()->ip()) {
|
||||
// 登录 IP 绑定;客服后台服务器代查患者/订单的例外见 isTrustedRpaServerRequest
|
||||
if ($request->adminInfo['login_ip'] != request()->ip()
|
||||
&& !self::isTrustedRpaServerRequest(
|
||||
(array) $request->adminInfo,
|
||||
request()->ip(),
|
||||
env('wecom_rpa.server_ips', '')
|
||||
)) {
|
||||
return JsonService::fail('ip地址发生变化,请重新登录', [], -1);
|
||||
}
|
||||
|
||||
@@ -122,6 +129,29 @@ class AuthMiddleware
|
||||
}, $data);
|
||||
}
|
||||
|
||||
/**
|
||||
* 企业微信客服桌面软件(7)/ 手机控制台(9)的令牌会交给客服后台,由客服后台服务器
|
||||
* 代查患者、订单;服务器出口 IP 与员工电脑登录时绑定的 IP 不同,按原规则每次都会被判为
|
||||
* 「ip地址发生变化」。DesktopController::session 出于同一原因已免登录。
|
||||
* 这里只在「RPA 终端令牌 + 请求来自 .env [WECOM_RPA] SERVER_IPS 配置的客服后台服务器 IP」
|
||||
* 时跳过 IP 绑定,网页端/APP 等其他终端令牌仍保留 IP 保护;未配置时与原逻辑完全一致。
|
||||
* 只跳过 IP 校验,后续菜单权限校验照常执行,客服后台拿到的仍只是该账号角色允许的数据。
|
||||
*
|
||||
* @param mixed $configured 逗号/空白分隔的 IP 列表,逐个精确匹配(IPv4/IPv6 字面量)
|
||||
*/
|
||||
public static function isTrustedRpaServerRequest(array $adminInfo, string $ip, $configured): bool
|
||||
{
|
||||
if (!in_array((int) ($adminInfo['terminal'] ?? 0), AdminTerminalEnum::wecomRpaTerminals(), true)) {
|
||||
return false;
|
||||
}
|
||||
if ($ip === '' || !is_string($configured)) {
|
||||
return false;
|
||||
}
|
||||
$trustedIps = preg_split('/[\s,]+/', trim($configured), -1, PREG_SPLIT_NO_EMPTY) ?: [];
|
||||
|
||||
return in_array($ip, $trustedIps, true);
|
||||
}
|
||||
|
||||
/**
|
||||
* 日常记录权限域:前端统一收口到 tcm.diagnosis/dailyRecord,
|
||||
* 但待办/跟踪备注接口仍保留历史路由名,故在鉴权层做精确别名映射。
|
||||
|
||||
Reference in New Issue
Block a user