diff --git a/src/Api/ErrorHandler.php b/src/Api/ErrorHandler.php index 016d383fbf4f5a30fa44bc425221fba6d8b76288..bae0ed6a86b333feef5845a18cc851231387ac90 100644 --- a/src/Api/ErrorHandler.php +++ b/src/Api/ErrorHandler.php @@ -40,10 +40,10 @@ class ErrorHandler public function handler(Throwable $e) { if (! $e instanceof Exception) { - $e = new Exception($e->getMessage(), $e->getCode(), $e); + $e = new Exception($e->getMessage().'\n'.$e->getTraceAsString(), $e->getCode(), $e); } - $info = sprintf('%s: %s in %s:%s', get_class($e), $e->getMessage(), $e->getFile(), $e->getLine()); + $info = sprintf('%s: %s in %s:%s', get_class($e), $e->getMessage().'\n'.$e->getTraceAsString(), $e->getFile(), $e->getLine()); $this->logger->info($info); $response = $this->errorHandler->handle($e); diff --git a/src/Api/ExceptionHandler/PermissionDeniedExceptionHandler.php b/src/Api/ExceptionHandler/PermissionDeniedExceptionHandler.php index a116870b8c05612301af84f70a329a49ff344018..e40c286ba7e7b0b26085639037b47bda1b2c802a 100644 --- a/src/Api/ExceptionHandler/PermissionDeniedExceptionHandler.php +++ b/src/Api/ExceptionHandler/PermissionDeniedExceptionHandler.php @@ -56,26 +56,13 @@ class PermissionDeniedExceptionHandler implements ExceptionHandlerInterface if(isset($siteManage[$reqType])){ $siteOpen = $siteManage[$reqType]['value']; } - if (!$siteOpen) { $error['code'] = 'site_closed'; - $error['detail'][] = $settings->get('site_close_msg')?:''; - } elseif ($e->getMessage() == 'ban_user') { - $error['code'] = 'ban_user'; - } elseif ($e->getMessage() == 'register_validate') { - $error['code'] = 'register_validate'; - } elseif ($e->getMessage() == 'user_deny') { - $error['code'] = 'user_deny'; - } elseif ($e->getMessage() == 'validate_reject') { - $error['code'] = 'validate_reject'; - } elseif ($e->getMessage() == 'validate_ignore') { - $error['code'] = 'validate_ignore'; - } elseif ($e->getMessage() == 'register_close') { - $error['code'] = 'register_close'; - } else { - $error['code'] = 'permission_denied'; + $error['detail'][] = $settings->get('site_close_msg') ?: ''; + }else{ + $error['code'] = $e->getMessage(); } - + return new ResponseBag($status, [$error]); } } diff --git a/src/Http/Middleware/CheckUserStatus.php b/src/Http/Middleware/CheckUserStatus.php index ba6a7c05277074a83629811c16ead080b4b10d95..1663c80c7f75a8aaa393c4d59edb1a129ab86ba4 100644 --- a/src/Http/Middleware/CheckUserStatus.php +++ b/src/Http/Middleware/CheckUserStatus.php @@ -18,6 +18,7 @@ namespace Discuz\Http\Middleware; +use App\Models\User; use Discuz\Auth\Exception\PermissionDeniedException; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; @@ -26,6 +27,11 @@ use Psr\Http\Server\RequestHandlerInterface; class CheckUserStatus implements MiddlewareInterface { + private $noCheckAction = [ + '/api/user/signinfields', + '/api/attachments' + ]; + /** * {@inheritdoc} * @@ -33,25 +39,34 @@ class CheckUserStatus implements MiddlewareInterface */ public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface { - $actor = $request->getAttribute('actor'); + $actor = $request->getAttribute('actor'); // 被禁用的用户 - if ($actor->status == 1) { + if ($actor->status == User::STATUS_BAN) { throw new PermissionDeniedException('ban_user'); } // 审核中的用户 - if ($actor->status == 2) { - throw new PermissionDeniedException('register_validate'); + if ($actor->status == User::STATUS_MOD) { + $path = $request->getUri()->getPath(); + if (!in_array($path, $this->noCheckAction)) { + throw new PermissionDeniedException('register_validate'); + } } // 审核拒绝 - if ($actor->status == 3) { + if ($actor->status == User::STATUS_REFUSE) { throw new PermissionDeniedException('validate_reject'); } // 审核忽略 - if ($actor->status == 4) { + if ($actor->status == User::STATUS_IGNORE) { throw new PermissionDeniedException('validate_ignore'); } - + // 待填写扩展审核字段的用户 + if ($actor->status == User::STATUS_NEED_FIELDS) { + $path = $request->getUri()->getPath(); + if (!in_array($path, $this->noCheckAction)) { + throw new PermissionDeniedException('need_ext_fields'); + } + } return $handler->handle($request); } } diff --git a/src/Http/Server.php b/src/Http/Server.php index f8eb79012aaa1b9b27529a6a8696d1e86c6e51fb..8f8e9382baed615d333beb6b8b574dcf98c65ff4 100644 --- a/src/Http/Server.php +++ b/src/Http/Server.php @@ -21,6 +21,7 @@ namespace Discuz\Http; use Discuz\Foundation\Application; use Discuz\Foundation\SiteApp; use Discuz\Http\Middleware\RequestHandler; +use Illuminate\Database\QueryException; use Laminas\Diactoros\Response; use Laminas\Diactoros\ServerRequest; use Laminas\Diactoros\ServerRequestFactory; @@ -37,6 +38,8 @@ class Server extends SiteApp { try { $this->siteBoot(); + } catch (QueryException $e) { + // 忽略,避免由于数据库引起的启动错误,导致页面无法显示 } catch (Throwable $e) { exit($this->formatBootException($e)); } diff --git a/src/Models/DzqModel.php b/src/Models/DzqModel.php new file mode 100644 index 0000000000000000000000000000000000000000..df8df69b110a75cb98ca0a73dee143c2103bf562 --- /dev/null +++ b/src/Models/DzqModel.php @@ -0,0 +1,34 @@ +