Compare commits

..

11 Commits

Author SHA1 Message Date
mizhexiaoxiao
79d1bbb43f
Merge pull request #78 from LiangJinchao/main
fix auditlog for query.
2025-07-04 16:35:58 +08:00
JC Liang
df6a0352c8
fix login's loading message.
优化登录验证时的提示消息
2025-06-23 17:07:07 +08:00
JC Liang
4b7c763ff1
fix auditlog for query.
修复auditlog模块“请求路径”筛选条件不生效的问题。
2025-06-23 11:24:57 +08:00
mizhexiaoxiao
2c1873e823
Merge pull request #73 from HAxiaoyu/fix/prevent-file-upload-logging
排除日志中的文件对象
2025-06-17 11:17:29 +08:00
root
03a352c18e 排除日志中加入文件对象 2025-06-01 21:09:40 +08:00
mizhexiaoxiao
d32a1df922
Merge pull request #72 from mizhexiaoxiao/mizhexiaoxiao-patch-3
Update README.md
2025-05-30 16:07:35 +08:00
mizhexiaoxiao
caab8f0078
Update README.md 2025-05-30 16:07:15 +08:00
mizhexiaoxiao
7a49b8db7d
Merge pull request #71 from Anning01/fixbug/object-file-name/2025-5-30
Modify the name of the jwt file to avoid conflicts with the nickname …
2025-05-30 14:24:29 +08:00
anning
b910f3b0ef Modify the name of the jwt file to avoid conflicts with the nickname of the pyjwt file. Change the error command "DependPermisson" to "DependPermission" 2025-05-30 14:20:43 +08:00
mizhexiaoxiao
2aabb9c1ae
Merge pull request #68 from Anning01/fixbug/auditlog-datetime/2025-5-14
fix (tortoise.exceptions.OperationalError: invalid input for query ar…
2025-05-14 17:10:29 +08:00
anning
626b719b77 fix (tortoise.exceptions.OperationalError: invalid input for query argument $1: '2025-05-14 00:00:00' (expected a datetime.date or datetime.datetime instance, got 'str')) Fixed the bug where strings could not be queried by date, and used the Pydantic model for parameter validation and type conversion 2025-05-14 11:31:00 +08:00
8 changed files with 25 additions and 14 deletions

View File

@ -18,7 +18,7 @@
- **细粒度权限控制**:实现按钮和接口级别的权限控制,确保不同用户或角色在界面操作和接口访问时具有不同的权限限制。 - **细粒度权限控制**:实现按钮和接口级别的权限控制,确保不同用户或角色在界面操作和接口访问时具有不同的权限限制。
### 在线预览 ### 在线预览
- http://vue-fastapi-admin.com - [http://47.111.145.81:3000](http://47.111.145.81:3000)
- username: admin - username: admin
- password: 123456 - password: 123456

View File

@ -1,6 +1,6 @@
from fastapi import APIRouter from fastapi import APIRouter
from app.core.dependency import DependPermisson from app.core.dependency import DependPermission
from .apis import apis_router from .apis import apis_router
from .auditlog import auditlog_router from .auditlog import auditlog_router
@ -13,9 +13,9 @@ from .users import users_router
v1_router = APIRouter() v1_router = APIRouter()
v1_router.include_router(base_router, prefix="/base") v1_router.include_router(base_router, prefix="/base")
v1_router.include_router(users_router, prefix="/user", dependencies=[DependPermisson]) v1_router.include_router(users_router, prefix="/user", dependencies=[DependPermission])
v1_router.include_router(roles_router, prefix="/role", dependencies=[DependPermisson]) v1_router.include_router(roles_router, prefix="/role", dependencies=[DependPermission])
v1_router.include_router(menus_router, prefix="/menu", dependencies=[DependPermisson]) v1_router.include_router(menus_router, prefix="/menu", dependencies=[DependPermission])
v1_router.include_router(apis_router, prefix="/api", dependencies=[DependPermisson]) v1_router.include_router(apis_router, prefix="/api", dependencies=[DependPermission])
v1_router.include_router(depts_router, prefix="/dept", dependencies=[DependPermisson]) v1_router.include_router(depts_router, prefix="/dept", dependencies=[DependPermission])
v1_router.include_router(auditlog_router, prefix="/auditlog", dependencies=[DependPermisson]) v1_router.include_router(auditlog_router, prefix="/auditlog", dependencies=[DependPermission])

View File

@ -1,3 +1,4 @@
from datetime import datetime
from fastapi import APIRouter, Query from fastapi import APIRouter, Query
from tortoise.expressions import Q from tortoise.expressions import Q
@ -16,9 +17,10 @@ async def get_audit_log_list(
module: str = Query("", description="功能模块"), module: str = Query("", description="功能模块"),
method: str = Query("", description="请求方法"), method: str = Query("", description="请求方法"),
summary: str = Query("", description="接口描述"), summary: str = Query("", description="接口描述"),
path: str = Query("", description="请求路径"),
status: int = Query(None, description="状态码"), status: int = Query(None, description="状态码"),
start_time: str = Query("", description="开始时间"), start_time: datetime = Query("", description="开始时间"),
end_time: str = Query("", description="结束时间"), end_time: datetime = Query("", description="结束时间"),
): ):
q = Q() q = Q()
if username: if username:
@ -29,6 +31,8 @@ async def get_audit_log_list(
q &= Q(method__icontains=method) q &= Q(method__icontains=method)
if summary: if summary:
q &= Q(summary__icontains=summary) q &= Q(summary__icontains=summary)
if path:
q &= Q(path__icontains=path)
if status: if status:
q &= Q(status=status) q &= Q(status=status)
if start_time and end_time: if start_time and end_time:

View File

@ -10,7 +10,7 @@ from app.schemas.base import Fail, Success
from app.schemas.login import * from app.schemas.login import *
from app.schemas.users import UpdatePassword from app.schemas.users import UpdatePassword
from app.settings import settings from app.settings import settings
from app.utils.jwt import create_access_token from app.utils.jwt_utils import create_access_token
from app.utils.password import get_password_hash, verify_password from app.utils.password import get_password_hash, verify_password
router = APIRouter() router = APIRouter()

View File

@ -50,4 +50,4 @@ class PermissionControl:
DependAuth = Depends(AuthControl.is_authed) DependAuth = Depends(AuthControl.is_authed)
DependPermisson = Depends(PermissionControl.has_permission) DependPermission = Depends(PermissionControl.has_permission)

View File

@ -68,7 +68,14 @@ class HttpAuditLogMiddleware(BaseHTTPMiddleware):
except json.JSONDecodeError: except json.JSONDecodeError:
try: try:
body = await request.form() body = await request.form()
args.update(body) # args.update(body)
for k, v in body.items():
if hasattr(v, "filename"): # 文件上传行为
args[k] = v.filename
elif isinstance(v, list) and v and hasattr(v[0], "filename"):
args[k] = [file.filename for file in v]
else:
args[k] = v
except Exception: except Exception:
pass pass

View File

@ -87,7 +87,7 @@ async function handleLogin() {
} }
try { try {
loading.value = true loading.value = true
$message.loading(t('views.login.message_login_success')) $message.loading(t('views.login.message_verifying'))
const res = await api.login({ username, password: password.toString() }) const res = await api.login({ username, password: password.toString() })
$message.success(t('views.login.message_login_success')) $message.success(t('views.login.message_login_success'))
setToken(res.data.access_token) setToken(res.data.access_token)