feat: 系统配置添加按钮级权限控制

This commit is contained in:
2025-02-22 14:02:51 +08:00
parent 2f103b4b59
commit 11dd8e755f
3 changed files with 22 additions and 20 deletions

View File

@@ -11,13 +11,14 @@ from typing import Optional
from fastapi import APIRouter, Depends, Path, Request, Query
from fastapi.responses import JSONResponse
from annotation.auth import Auth
from annotation.log import Log
from config.constant import BusinessType
from config.get_redis import Redis
from controller.login import LoginController
from models import Config
from schemas.common import BaseResponse
from schemas.config import AddConfigParams, DeleteConfigListParams, GetConfigInfoResponse, GetConfigListResponse
from schemas.common import BaseResponse, DeleteListParams
from schemas.config import AddConfigParams, GetConfigInfoResponse, GetConfigListResponse
from utils.response import Response
configApi = APIRouter(
@@ -28,8 +29,9 @@ configApi = APIRouter(
@configApi.post("/add", response_class=JSONResponse, response_model=BaseResponse, summary="新增配置")
@Log(title="新增配置", business_type=BusinessType.INSERT)
@Auth(permission_list=["config:btn:add"])
async def add_config(request: Request, params: AddConfigParams):
if await Config.get_or_none(name=params.name, key=params.key):
if await Config.get_or_none(name=params.name, key=params.key, del_flag=1):
return Response.error(msg="配置已存在")
config = await Config.create(
name=params.name,
@@ -48,9 +50,11 @@ async def add_config(request: Request, params: AddConfigParams):
@configApi.delete("/delete/{id}", response_class=JSONResponse, response_model=BaseResponse, summary="删除配置")
@configApi.post("/delete/{id}", response_class=JSONResponse, response_model=BaseResponse, summary="删除配置")
@Log(title="删除配置", business_type=BusinessType.DELETE)
@Auth(permission_list=["config:btn:delete"])
async def delete_config(request: Request, id: str = Path(description="配置ID")):
if config := await Config.get_or_none(id=id):
await config.delete()
if config := await Config.get_or_none(id=id, del_flag=1):
config.del_flag = 0
await config.save()
await Redis.init_system_config(request.app)
return Response.success(msg="删除成功")
else:
@@ -60,10 +64,12 @@ async def delete_config(request: Request, id: str = Path(description="配置ID")
@configApi.delete("/deleteList", response_class=JSONResponse, response_model=BaseResponse, summary="批量删除配置")
@configApi.post("/deleteList", response_class=JSONResponse, response_model=BaseResponse, summary="批量删除配置")
@Log(title="批量删除配置", business_type=BusinessType.DELETE)
async def delete_config_list(request: Request, params: DeleteConfigListParams):
@Auth(permission_list=["config:btn:delete"])
async def delete_config_list(request: Request, params: DeleteListParams):
for id in set(params.ids):
if config := await Config.get_or_none(id=id):
await config.delete()
if config := await Config.get_or_none(id=id, del_flag=1):
config.del_flag = 0
await config.save()
await Redis.init_system_config(request.app)
return Response.success(msg="删除成功")
@@ -71,8 +77,9 @@ async def delete_config_list(request: Request, params: DeleteConfigListParams):
@configApi.put("/update/{id}", response_class=JSONResponse, response_model=BaseResponse, summary="修改配置")
@configApi.post("/update/{id}", response_class=JSONResponse, response_model=BaseResponse, summary="修改配置")
@Log(title="修改配置", business_type=BusinessType.UPDATE)
@Auth(permission_list=["config:btn:update"])
async def update_config(request: Request, params: AddConfigParams, id: str = Path(description="配置ID")):
if config := await Config.get_or_none(id=id):
if config := await Config.get_or_none(id=id, del_flag=1):
config.name = params.name
config.key = params.key
config.value = params.value
@@ -87,8 +94,9 @@ async def update_config(request: Request, params: AddConfigParams, id: str = Pat
@configApi.get("/info/{id}", response_class=JSONResponse, response_model=GetConfigInfoResponse, summary="获取配置信息")
@Log(title="获取配置信息", business_type=BusinessType.SELECT)
@Auth(permission_list=["config:btn:info"])
async def get_config_info(request: Request, id: str = Path(description="配置ID")):
if config := await Config.get_or_none(id=id):
if config := await Config.get_or_none(id=id, del_flag=1):
data = {
"id": config.id,
"name": config.name,
@@ -108,6 +116,7 @@ async def get_config_info(request: Request, id: str = Path(description="配置ID
@configApi.get("/list", response_class=JSONResponse, response_model=GetConfigListResponse, summary="获取配置列表")
@Log(title="获取配置列表", business_type=BusinessType.SELECT)
@Auth(permission_list=["config:btn:list"])
async def get_config_list(request: Request,
page: int = Query(default=1, description="当前页码"),
pageSize: int = Query(default=10, description="每页数量"),
@@ -122,8 +131,8 @@ async def get_config_list(request: Request,
'type': type,
}.items() if v
}
total = await Config.filter(**filterArgs).count()
data = await Config.filter(**filterArgs).offset((page - 1) * pageSize).limit(pageSize).values(
total = await Config.filter(**filterArgs, del_flag=1).count()
data = await Config.filter(**filterArgs, del_flag=1).offset((page - 1) * pageSize).limit(pageSize).values(
id="id",
name="name",
key="key",

View File

@@ -79,7 +79,7 @@ class Redis:
# 删除匹配的键
if keys:
await app.state.redis.delete(*keys)
config = await Config.all().values()
config = await Config.filter(del_flag=1).values()
for item in config:
await app.state.redis.set(f"{RedisKeyConfig.SYSTEM_CONFIG.key}:{item.get('key')}",
item.get('value'), )

View File

@@ -42,13 +42,6 @@ class AddConfigParams(BaseModel):
remark: Optional[str] = Field(default=None, max_length=255, description="备注信息")
class DeleteConfigListParams(BaseModel):
"""
批量删除配置参数模型
"""
ids: List[str] = Field(default=[], description="配置ID")
class GetConfigInfoResponse(BaseResponse):
"""
获取配置模型信息响应