Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions ruoyi-fastapi-backend/.env.dev
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@ APP_WORKERS = 1
APP_IP_LOCATION_QUERY = true
# 应用是否允许账号同时登录
APP_SAME_TIME_LOGIN = true
# 应用是否为演示模式
APP_DEMO_MODE = false
# 应用是否禁用Swagger文档
APP_DISABLE_SWAGGER = false
# 应用是否禁用ReDoc文档
Expand Down
2 changes: 2 additions & 0 deletions ruoyi-fastapi-backend/.env.dockermy
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@ APP_WORKERS = 1
APP_IP_LOCATION_QUERY = true
# 应用是否允许账号同时登录
APP_SAME_TIME_LOGIN = true
# 应用是否为演示模式
APP_DEMO_MODE = false
# 应用是否禁用Swagger文档
APP_DISABLE_SWAGGER = true
# 应用是否禁用ReDoc文档
Expand Down
2 changes: 2 additions & 0 deletions ruoyi-fastapi-backend/.env.dockerpg
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@ APP_RELOAD = false
APP_WORKERS = 1
# 应用是否开启IP归属区域查询
APP_IP_LOCATION_QUERY = true
# 应用是否为演示模式
APP_DEMO_MODE = false
# 应用是否允许账号同时登录
APP_SAME_TIME_LOGIN = true
# 应用是否禁用Swagger文档
Expand Down
2 changes: 2 additions & 0 deletions ruoyi-fastapi-backend/.env.prod
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@ APP_WORKERS = 1
APP_IP_LOCATION_QUERY = true
# 应用是否允许账号同时登录
APP_SAME_TIME_LOGIN = true
# 应用是否为演示模式
APP_DEMO_MODE = false
# 应用是否禁用Swagger文档
APP_DISABLE_SWAGGER = true
# 应用是否禁用ReDoc文档
Expand Down
1 change: 1 addition & 0 deletions ruoyi-fastapi-backend/config/env.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ class AppSettings(BaseSettings):
app_workers: int = 1
app_ip_location_query: bool = True
app_same_time_login: bool = True
app_demo_mode: bool = False
app_disable_swagger: bool = False
app_disable_redoc: bool = False

Expand Down
62 changes: 62 additions & 0 deletions ruoyi-fastapi-backend/middlewares/demo_mode_middleware.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
from fastapi import FastAPI, Request
from starlette.middleware.base import BaseHTTPMiddleware, RequestResponseEndpoint
from starlette.responses import Response

from utils.log_util import logger
from utils.response_util import ResponseUtil


class DemoModeMiddleware(BaseHTTPMiddleware):
"""
演示模式中间件
"""

async def dispatch(self, request: Request, call_next: RequestResponseEndpoint) -> Response:
"""
演示模式下拦截指定请求
"""
url_path = str(request.url)
method = request.method.lower()
intercept_url_list = [
'system/user',
'system/role',
'system/menu',
'system/dept',
'system/post',
'system/dict',
'system/config',
'system/notice',
'monitor/operlog',
'monitor/logininfor',
'monitor/online',
'monitor/job',
'monitor/jobLog',
'monitor/cache',
'ai/model',
'ai/chat',
]

for item in intercept_url_list:
if (url_path.startswith(f'{request.base_url!s}{item}') and method != 'get') or url_path.startswith(
(
f'{request.base_url!s}common',
f'{request.base_url!s}register',
f'{request.base_url!s}tool/gen/createTable',
)
):
operate_ip = request.headers.get('X-Forwarded-For')
logger.warning(
'请求IP:{}||请求API:{}||请求方法:{}||请求结果:演示模式,不允许操作!', operate_ip, url_path, method
)
return ResponseUtil.failure(msg='演示模式,不允许操作!')
response = await call_next(request)
return response


def add_demo_mode_middleware(app: FastAPI) -> None:
"""
添加演示模式中间件

:param app: FastAPI对象
"""
app.add_middleware(DemoModeMiddleware)
5 changes: 5 additions & 0 deletions ruoyi-fastapi-backend/middlewares/handle.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
from fastapi import FastAPI

from config.env import AppConfig
from middlewares.context_middleware import add_context_cleanup_middleware
from middlewares.cors_middleware import add_cors_middleware
from middlewares.demo_mode_middleware import add_demo_mode_middleware
from middlewares.gzip_middleware import add_gzip_middleware
from middlewares.trace_middleware import add_trace_middleware

Expand All @@ -18,3 +20,6 @@ def handle_middleware(app: FastAPI) -> None:
add_gzip_middleware(app)
# 加载trace中间件
add_trace_middleware(app)
if AppConfig.app_demo_mode:
# 加载演示模式中间件
add_demo_mode_middleware(app)