user()->id); if ($user === null || $user->status === UserModel::STATUS_DISABLED) { throw new RepositoryException('账号不存在或已被停用'); } return $user; } /** * 可选登录场景手动识别当前用户(路由关闭 authorize 时使用) * * 手动解析 Bearer token;未携带 token、token 无效或非小程序用户时返回 null(不抛错)。 */ protected function optionalUser(Request $request): ?UserModel { $token = $request->bearerToken(); if (empty($token)) { return null; } $accessToken = SysAccessToken::findToken($token); if ($accessToken === null || $accessToken->tokenable_type !== UserModel::class) { return null; } $user = UserModel::find($accessToken->tokenable_id); if ($user === null || $user->status === UserModel::STATUS_DISABLED) { return null; } return $user; } /** * 门店端前置校验 */ protected function ensureStoreBound(UserModel $user): StoreModel { if ($user->store_id <= 0) { throw new RepositoryException('尚未绑定门店,请联系客服处理'); } $store = StoreModel::find($user->store_id); if ($store === null || $store->status !== StoreModel::STATUS_NORMAL) { throw new RepositoryException('门店不存在或已停用,请联系客服处理'); } return $store; } /** * 用户当前绑定的正常门店(未绑定/已停用返回 null,不抛错) */ protected function boundStore(UserModel $user): ?StoreModel { if ($user->store_id <= 0) { return null; } $store = StoreModel::find($user->store_id); if ($store === null || $store->status !== StoreModel::STATUS_NORMAL) { return null; } return $store; } }