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

View File

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

View File

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