Skip to content

Commit 116fc18

Browse files
committed
Add auth whitelist regular expression config
1 parent d7f87ed commit 116fc18

File tree

5 files changed

+16
-23
lines changed

5 files changed

+16
-23
lines changed

backend/app/admin/api/v1/monitor/redis.py

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,15 @@
11
#!/usr/bin/env python3
22
# -*- coding: utf-8 -*-
3-
from fastapi import APIRouter, Depends
3+
from fastapi import APIRouter
44

55
from backend.common.response.response_schema import ResponseModel, response_base
66
from backend.common.security.jwt import DependsJwtAuth
7-
from backend.common.security.permission import RequestPermission
87
from backend.utils.redis_info import redis_info
98

109
router = APIRouter()
1110

1211

13-
@router.get(
14-
'',
15-
summary='redis 监控',
16-
dependencies=[
17-
Depends(RequestPermission('sys:monitor:redis')),
18-
DependsJwtAuth,
19-
],
20-
)
12+
@router.get('', summary='redis 监控', dependencies=[DependsJwtAuth])
2113
async def get_redis_info() -> ResponseModel:
2214
data = {
2315
'info': await redis_info.get_info(),

backend/app/admin/api/v1/monitor/server.py

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,16 @@
11
#!/usr/bin/env python3
22
# -*- coding: utf-8 -*-
3-
from fastapi import APIRouter, Depends
3+
from fastapi import APIRouter
44
from starlette.concurrency import run_in_threadpool
55

66
from backend.common.response.response_schema import ResponseModel, response_base
77
from backend.common.security.jwt import DependsJwtAuth
8-
from backend.common.security.permission import RequestPermission
98
from backend.utils.server_info import server_info
109

1110
router = APIRouter()
1211

1312

14-
@router.get(
15-
'',
16-
summary='server 监控',
17-
dependencies=[
18-
Depends(RequestPermission('sys:monitor:server')),
19-
DependsJwtAuth,
20-
],
21-
)
13+
@router.get('', summary='server 监控', dependencies=[DependsJwtAuth])
2214
async def get_server_info() -> ResponseModel:
2315
data = {
2416
# 扔到线程池,避免阻塞

backend/common/security/rbac.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,9 @@ async def rbac_verify(request: Request, _token: str = DependsJwtAuth) -> None:
2323
# API 鉴权白名单
2424
if path in settings.TOKEN_REQUEST_PATH_EXCLUDE:
2525
return
26+
for pattern in settings.TOKEN_REQUEST_PATH_EXCLUDE_PATTERN:
27+
if pattern.match(path):
28+
return
2629

2730
# JWT 授权状态强制校验
2831
if not request.auth.scopes:

backend/core/conf.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#!/usr/bin/env python3
22
# -*- coding: utf-8 -*-
33
from functools import lru_cache
4-
from typing import Any, Literal
4+
from typing import Any, Literal, Pattern
55

66
from pydantic import model_validator
77
from pydantic_settings import BaseSettings, SettingsConfigDict
@@ -70,7 +70,9 @@ class Settings(BaseSettings):
7070
TOKEN_REFRESH_REDIS_PREFIX: str = 'fba:refresh_token'
7171
TOKEN_REQUEST_PATH_EXCLUDE: list[str] = [ # JWT / RBAC 路由白名单
7272
f'{FASTAPI_API_V1_PATH}/auth/login',
73-
f'{FASTAPI_API_V1_PATH}/auth/logout',
73+
]
74+
TOKEN_REQUEST_PATH_EXCLUDE_PATTERN: list[Pattern[str]] = [ # JWT / RBAC 路由白名单(正则)
75+
rf'^{FASTAPI_API_V1_PATH}/monitors/(redis|server)$',
7476
]
7577

7678
# JWT

backend/middleware/jwt_auth_middleware.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,12 @@ async def authenticate(self, request: Request) -> tuple[AuthCredentials, GetUser
5959
if not token:
6060
return None
6161

62-
if request.url.path in settings.TOKEN_REQUEST_PATH_EXCLUDE:
62+
path = request.url.path
63+
if path in settings.TOKEN_REQUEST_PATH_EXCLUDE:
6364
return None
65+
for pattern in settings.TOKEN_REQUEST_PATH_EXCLUDE_PATTERN:
66+
if pattern.match(path):
67+
return None
6468

6569
scheme, token = get_authorization_scheme_param(token)
6670
if scheme.lower() != 'bearer':

0 commit comments

Comments
 (0)