feat(config): 新增用户前端访问开关
新增 `frontend_enable` 配置并接入后台站点设置, 用于控制用户首页、订阅入口及用户侧 API 是否对外开放。 开关关闭时相关用户入口统一返回空 404, 同时保留节点 API、管理后台与外部回调接口可访问。 补充特性测试覆盖默认开启、关闭隐藏与节点接口白名单场景
This commit is contained in:
@@ -137,6 +137,7 @@ class ConfigController extends Controller
|
||||
'site' => [
|
||||
'logo' => admin_setting('logo'),
|
||||
'force_https' => (int) admin_setting('force_https', 0),
|
||||
'frontend_enable' => (bool) admin_setting('frontend_enable', 1),
|
||||
'stop_register' => (int) admin_setting('stop_register', 0),
|
||||
'app_name' => admin_setting('app_name', 'XBoard'),
|
||||
'app_description' => admin_setting('app_description', 'XBoard is best!'),
|
||||
|
||||
@@ -72,6 +72,7 @@ class Kernel extends HttpKernel
|
||||
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
|
||||
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
|
||||
'user' => \App\Http\Middleware\User::class,
|
||||
'user.frontend' => \App\Http\Middleware\EnsureUserFrontendEnabled::class,
|
||||
'admin' => \App\Http\Middleware\Admin::class,
|
||||
'client' => \App\Http\Middleware\Client::class,
|
||||
'staff' => \App\Http\Middleware\Staff::class,
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Middleware;
|
||||
|
||||
use Closure;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class EnsureUserFrontendEnabled
|
||||
{
|
||||
/**
|
||||
* Handle an incoming request.
|
||||
*/
|
||||
public function handle(Request $request, Closure $next)
|
||||
{
|
||||
$enabled = filter_var(
|
||||
admin_setting('frontend_enable', true),
|
||||
FILTER_VALIDATE_BOOLEAN
|
||||
);
|
||||
|
||||
if (!$enabled) {
|
||||
return response('', 404);
|
||||
}
|
||||
|
||||
return $next($request);
|
||||
}
|
||||
}
|
||||
@@ -24,6 +24,7 @@ class ConfigSave extends FormRequest
|
||||
// site
|
||||
'logo' => 'nullable|url',
|
||||
'force_https' => '',
|
||||
'frontend_enable' => 'boolean',
|
||||
'stop_register' => '',
|
||||
'app_name' => '',
|
||||
'app_description' => '',
|
||||
|
||||
@@ -11,7 +11,7 @@ class ClientRoute
|
||||
{
|
||||
$router->group([
|
||||
'prefix' => 'client',
|
||||
'middleware' => 'client'
|
||||
'middleware' => ['user.frontend', 'client']
|
||||
], function ($router) {
|
||||
// Client
|
||||
$router->get('/subscribe', [ClientController::class, 'subscribe'])->name('client.subscribe.legacy');
|
||||
|
||||
@@ -14,14 +14,18 @@ class GuestRoute
|
||||
$router->group([
|
||||
'prefix' => 'guest'
|
||||
], function ($router) {
|
||||
// Plan
|
||||
$router->get('/plan/fetch', [PlanController::class, 'fetch']);
|
||||
$router->group([
|
||||
'middleware' => 'user.frontend'
|
||||
], function ($router) {
|
||||
// Plan
|
||||
$router->get('/plan/fetch', [PlanController::class, 'fetch']);
|
||||
// Comm
|
||||
$router->get('/comm/config', [CommController::class, 'config']);
|
||||
});
|
||||
// Telegram
|
||||
$router->post('/telegram/webhook', [TelegramController::class, 'webhook']);
|
||||
// Payment
|
||||
$router->match(['get', 'post'], '/payment/notify/{method}/{uuid}', [PaymentController::class, 'notify']);
|
||||
// Comm
|
||||
$router->get('/comm/config', [CommController::class, 'config']);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,7 +10,8 @@ class PassportRoute
|
||||
public function map(Registrar $router)
|
||||
{
|
||||
$router->group([
|
||||
'prefix' => 'passport'
|
||||
'prefix' => 'passport',
|
||||
'middleware' => 'user.frontend'
|
||||
], function ($router) {
|
||||
// Auth
|
||||
$router->post('/auth/register', [AuthController::class, 'register']);
|
||||
|
||||
@@ -22,7 +22,7 @@ class UserRoute
|
||||
{
|
||||
$router->group([
|
||||
'prefix' => 'user',
|
||||
'middleware' => 'user'
|
||||
'middleware' => ['user.frontend', 'user']
|
||||
], function ($router) {
|
||||
// User
|
||||
$router->get('/resetSecurity', [UserController::class, 'resetSecurity']);
|
||||
|
||||
@@ -10,7 +10,7 @@ class ClientRoute
|
||||
{
|
||||
$router->group([
|
||||
'prefix' => 'client',
|
||||
'middleware' => 'client'
|
||||
'middleware' => ['user.frontend', 'client']
|
||||
], function ($router) {
|
||||
// App
|
||||
$router->get('/app/getConfig', [AppController::class, 'getConfig']);
|
||||
|
||||
@@ -10,7 +10,7 @@ class UserRoute
|
||||
{
|
||||
$router->group([
|
||||
'prefix' => 'user',
|
||||
'middleware' => 'user'
|
||||
'middleware' => ['user.frontend', 'user']
|
||||
], function ($router) {
|
||||
// User
|
||||
$router->get('/resetSecurity', [UserController::class, 'resetSecurity']);
|
||||
|
||||
Reference in New Issue
Block a user