Skip to content

Commit 0b0a496

Browse files
authored
feat: 应用新增演示模式 (#23)
1 parent 9c0bdaa commit 0b0a496

File tree

7 files changed

+76
-0
lines changed

7 files changed

+76
-0
lines changed

ruoyi-fastapi-backend/.env.dev

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ APP_WORKERS = 1
1919
APP_IP_LOCATION_QUERY = true
2020
# 应用是否允许账号同时登录
2121
APP_SAME_TIME_LOGIN = true
22+
# 应用是否为演示模式
23+
APP_DEMO_MODE = false
2224
# 应用是否禁用Swagger文档
2325
APP_DISABLE_SWAGGER = false
2426
# 应用是否禁用ReDoc文档

ruoyi-fastapi-backend/.env.dockermy

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ APP_WORKERS = 1
1919
APP_IP_LOCATION_QUERY = true
2020
# 应用是否允许账号同时登录
2121
APP_SAME_TIME_LOGIN = true
22+
# 应用是否为演示模式
23+
APP_DEMO_MODE = false
2224
# 应用是否禁用Swagger文档
2325
APP_DISABLE_SWAGGER = true
2426
# 应用是否禁用ReDoc文档

ruoyi-fastapi-backend/.env.dockerpg

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ APP_RELOAD = false
1717
APP_WORKERS = 1
1818
# 应用是否开启IP归属区域查询
1919
APP_IP_LOCATION_QUERY = true
20+
# 应用是否为演示模式
21+
APP_DEMO_MODE = false
2022
# 应用是否允许账号同时登录
2123
APP_SAME_TIME_LOGIN = true
2224
# 应用是否禁用Swagger文档

ruoyi-fastapi-backend/.env.prod

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ APP_WORKERS = 1
1919
APP_IP_LOCATION_QUERY = true
2020
# 应用是否允许账号同时登录
2121
APP_SAME_TIME_LOGIN = true
22+
# 应用是否为演示模式
23+
APP_DEMO_MODE = false
2224
# 应用是否禁用Swagger文档
2325
APP_DISABLE_SWAGGER = true
2426
# 应用是否禁用ReDoc文档

ruoyi-fastapi-backend/config/env.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ class AppSettings(BaseSettings):
2424
app_workers: int = 1
2525
app_ip_location_query: bool = True
2626
app_same_time_login: bool = True
27+
app_demo_mode: bool = False
2728
app_disable_swagger: bool = False
2829
app_disable_redoc: bool = False
2930

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
from fastapi import FastAPI, Request
2+
from starlette.middleware.base import BaseHTTPMiddleware, RequestResponseEndpoint
3+
from starlette.responses import Response
4+
5+
from utils.log_util import logger
6+
from utils.response_util import ResponseUtil
7+
8+
9+
class DemoModeMiddleware(BaseHTTPMiddleware):
10+
"""
11+
演示模式中间件
12+
"""
13+
14+
async def dispatch(self, request: Request, call_next: RequestResponseEndpoint) -> Response:
15+
"""
16+
演示模式下拦截指定请求
17+
"""
18+
url_path = str(request.url)
19+
method = request.method.lower()
20+
intercept_url_list = [
21+
'system/user',
22+
'system/role',
23+
'system/menu',
24+
'system/dept',
25+
'system/post',
26+
'system/dict',
27+
'system/config',
28+
'system/notice',
29+
'monitor/operlog',
30+
'monitor/logininfor',
31+
'monitor/online',
32+
'monitor/job',
33+
'monitor/jobLog',
34+
'monitor/cache',
35+
'ai/model',
36+
'ai/chat',
37+
]
38+
39+
for item in intercept_url_list:
40+
if (url_path.startswith(f'{request.base_url!s}{item}') and method != 'get') or url_path.startswith(
41+
(
42+
f'{request.base_url!s}common',
43+
f'{request.base_url!s}register',
44+
f'{request.base_url!s}tool/gen/createTable',
45+
)
46+
):
47+
operate_ip = request.headers.get('X-Forwarded-For')
48+
logger.warning(
49+
'请求IP:{}||请求API:{}||请求方法:{}||请求结果:演示模式,不允许操作!', operate_ip, url_path, method
50+
)
51+
return ResponseUtil.failure(msg='演示模式,不允许操作!')
52+
response = await call_next(request)
53+
return response
54+
55+
56+
def add_demo_mode_middleware(app: FastAPI) -> None:
57+
"""
58+
添加演示模式中间件
59+
60+
:param app: FastAPI对象
61+
"""
62+
app.add_middleware(DemoModeMiddleware)

ruoyi-fastapi-backend/middlewares/handle.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
from fastapi import FastAPI
22

3+
from config.env import AppConfig
34
from middlewares.context_middleware import add_context_cleanup_middleware
45
from middlewares.cors_middleware import add_cors_middleware
6+
from middlewares.demo_mode_middleware import add_demo_mode_middleware
57
from middlewares.gzip_middleware import add_gzip_middleware
68
from middlewares.trace_middleware import add_trace_middleware
79

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

0 commit comments

Comments
 (0)