Skip to content

Commit 0833cd5

Browse files
authored
Optimize the userinfo cache cleaning logic (#586)
1 parent e8c844e commit 0833cd5

File tree

17 files changed

+109
-110
lines changed

17 files changed

+109
-110
lines changed

backend/app/admin/api/v1/sys/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
router.include_router(menu_router, prefix='/menus', tags=['系统菜单'])
1818
router.include_router(role_router, prefix='/roles', tags=['系统角色'])
1919
router.include_router(user_router, prefix='/users', tags=['系统用户'])
20-
router.include_router(data_rule_router, prefix='/data-rules', tags=['系统数据权限规则'])
20+
router.include_router(data_rule_router, prefix='/data-rules', tags=['系统数据规则'])
2121
router.include_router(token_router, prefix='/tokens', tags=['系统令牌'])
2222
router.include_router(upload_router, prefix='/upload', tags=['系统上传'])
2323
router.include_router(plugin_router, prefix='/plugin', tags=['系统插件'])

backend/app/admin/api/v1/sys/data_rule.py

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
# -*- coding: utf-8 -*-
33
from typing import Annotated
44

5-
from fastapi import APIRouter, Depends, Path, Query, Request
5+
from fastapi import APIRouter, Depends, Path, Query
66

77
from backend.app.admin.schema.data_rule import CreateDataRuleParam, GetDataRuleDetail, UpdateDataRuleParam
88
from backend.app.admin.service.data_rule_service import data_rule_service
@@ -16,13 +16,13 @@
1616
router = APIRouter()
1717

1818

19-
@router.get('/models', summary='获取支持过滤的数据库模型', dependencies=[DependsJwtAuth])
19+
@router.get('/models', summary='获取数据规则可用模型', dependencies=[DependsJwtAuth])
2020
async def get_data_rule_models() -> ResponseSchemaModel[list[str]]:
2121
models = await data_rule_service.get_models()
2222
return response_base.success(data=models)
2323

2424

25-
@router.get('/model/{model}/columns', summary='获取支持过滤的数据库模型列', dependencies=[DependsJwtAuth])
25+
@router.get('/model/{model}/columns', summary='获取数据规则可用模型列', dependencies=[DependsJwtAuth])
2626
async def get_data_rule_model_columns(
2727
model: Annotated[str, Path(description='模型名称')],
2828
) -> ResponseSchemaModel[list[str]]:
@@ -36,7 +36,7 @@ async def get_all_data_rules() -> ResponseSchemaModel[list[GetDataRuleDetail]]:
3636
return response_base.success(data=data)
3737

3838

39-
@router.get('/{pk}', summary='获取数据权限规则详情', dependencies=[DependsJwtAuth])
39+
@router.get('/{pk}', summary='获取数据规则详情', dependencies=[DependsJwtAuth])
4040
async def get_data_rule(
4141
pk: Annotated[int, Path(description='数据规则 ID')],
4242
) -> ResponseSchemaModel[GetDataRuleDetail]:
@@ -46,7 +46,7 @@ async def get_data_rule(
4646

4747
@router.get(
4848
'',
49-
summary='分页获取所有数据权限规则',
49+
summary='分页获取所有数据规则',
5050
dependencies=[
5151
DependsJwtAuth,
5252
DependsPagination,
@@ -62,7 +62,7 @@ async def get_pagination_data_rules(
6262

6363
@router.post(
6464
'',
65-
summary='创建数据权限规则',
65+
summary='创建数据规则',
6666
dependencies=[
6767
Depends(RequestPermission('data:rule:add')),
6868
DependsRBAC,
@@ -75,7 +75,7 @@ async def create_data_rule(obj: CreateDataRuleParam) -> ResponseModel:
7575

7676
@router.put(
7777
'/{pk}',
78-
summary='更新数据权限规则',
78+
summary='更新数据规则',
7979
dependencies=[
8080
Depends(RequestPermission('data:rule:edit')),
8181
DependsRBAC,
@@ -92,16 +92,14 @@ async def update_data_rule(
9292

9393
@router.delete(
9494
'',
95-
summary='批量删除数据权限规则',
95+
summary='批量删除数据规则',
9696
dependencies=[
9797
Depends(RequestPermission('data:rule:del')),
9898
DependsRBAC,
9999
],
100100
)
101-
async def delete_data_rule(
102-
request: Request, pk: Annotated[list[int], Query(description='数据规则 ID 列表')]
103-
) -> ResponseModel:
104-
count = await data_rule_service.delete(request=request, pk=pk)
101+
async def delete_data_rule(pk: Annotated[list[int], Query(description='数据规则 ID 列表')]) -> ResponseModel:
102+
count = await data_rule_service.delete(pk=pk)
105103
if count > 0:
106104
return response_base.success()
107105
return response_base.fail()

backend/app/admin/api/v1/sys/dept.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
# -*- coding: utf-8 -*-
33
from typing import Annotated, Any
44

5-
from fastapi import APIRouter, Depends, Path, Query, Request
5+
from fastapi import APIRouter, Depends, Path, Query
66

77
from backend.app.admin.schema.dept import CreateDeptParam, GetDeptDetail, UpdateDeptParam
88
from backend.app.admin.service.dept_service import dept_service
@@ -67,8 +67,8 @@ async def update_dept(pk: Annotated[int, Path(description='部门 ID')], obj: Up
6767
DependsRBAC,
6868
],
6969
)
70-
async def delete_dept(request: Request, pk: Annotated[int, Path(description='部门 ID')]) -> ResponseModel:
71-
count = await dept_service.delete(request=request, pk=pk)
70+
async def delete_dept(pk: Annotated[int, Path(description='部门 ID')]) -> ResponseModel:
71+
count = await dept_service.delete(pk=pk)
7272
if count > 0:
7373
return response_base.success()
7474
return response_base.fail()

backend/app/admin/api/v1/sys/menu.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,8 +71,8 @@ async def update_menu(pk: Annotated[int, Path(description='菜单 ID')], obj: Up
7171
DependsRBAC,
7272
],
7373
)
74-
async def delete_menu(request: Request, pk: Annotated[int, Path(description='菜单 ID 列表')]) -> ResponseModel:
75-
count = await menu_service.delete(request=request, pk=pk)
74+
async def delete_menu(pk: Annotated[int, Path(description='菜单 ID 列表')]) -> ResponseModel:
75+
count = await menu_service.delete(pk=pk)
7676
if count > 0:
7777
return response_base.success()
7878
return response_base.fail()

backend/app/admin/api/v1/sys/role.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
# -*- coding: utf-8 -*-
33
from typing import Annotated, Any
44

5-
from fastapi import APIRouter, Depends, Path, Query, Request
5+
from fastapi import APIRouter, Depends, Path, Query
66

77
from backend.app.admin.schema.role import (
88
CreateRoleParam,
@@ -116,26 +116,26 @@ async def update_role(pk: Annotated[int, Path(description='角色 ID')], obj: Up
116116
],
117117
)
118118
async def update_role_menus(
119-
request: Request, pk: Annotated[int, Path(description='角色 ID')], menu_ids: UpdateRoleMenuParam
119+
pk: Annotated[int, Path(description='角色 ID')], menu_ids: UpdateRoleMenuParam
120120
) -> ResponseModel:
121-
count = await role_service.update_role_menu(request=request, pk=pk, menu_ids=menu_ids)
121+
count = await role_service.update_role_menu(pk=pk, menu_ids=menu_ids)
122122
if count > 0:
123123
return response_base.success()
124124
return response_base.fail()
125125

126126

127127
@router.put(
128128
'/{pk}/rule',
129-
summary='更新角色数据权限规则',
129+
summary='更新角色数据规则',
130130
dependencies=[
131131
Depends(RequestPermission('sys:role:rule:edit')),
132132
DependsRBAC,
133133
],
134134
)
135135
async def update_role_rules(
136-
request: Request, pk: Annotated[int, Path(description='角色 ID')], rule_ids: UpdateRoleRuleParam
136+
pk: Annotated[int, Path(description='角色 ID')], rule_ids: UpdateRoleRuleParam
137137
) -> ResponseModel:
138-
count = await role_service.update_role_rule(request=request, pk=pk, rule_ids=rule_ids)
138+
count = await role_service.update_role_rule(pk=pk, rule_ids=rule_ids)
139139
if count > 0:
140140
return response_base.success()
141141
return response_base.fail()
@@ -149,8 +149,8 @@ async def update_role_rules(
149149
DependsRBAC,
150150
],
151151
)
152-
async def delete_role(request: Request, pk: Annotated[list[int], Query(description='角色 ID 列表')]) -> ResponseModel:
153-
count = await role_service.delete(request=request, pk=pk)
152+
async def delete_role(pk: Annotated[list[int], Query(description='角色 ID 列表')]) -> ResponseModel:
153+
count = await role_service.delete(pk=pk)
154154
if count > 0:
155155
return response_base.success()
156156
return response_base.fail()

backend/app/admin/crud/crud_data_rule.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212

1313

1414
class CRUDDataRule(CRUDPlus[DataRule]):
15-
"""数据权限规则数据库操作类"""
15+
"""数据规则数据库操作类"""
1616

1717
async def get(self, db: AsyncSession, pk: int) -> DataRule | None:
1818
"""

backend/app/admin/model/data_rule.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515

1616

1717
class DataRule(Base):
18-
"""数据权限规则表"""
18+
"""数据规则表"""
1919

2020
__tablename__ = 'sys_data_rule'
2121

backend/app/admin/model/m2m.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,6 @@
3030
Integer,
3131
ForeignKey('sys_data_rule.id', ondelete='CASCADE'),
3232
primary_key=True,
33-
comment='数据权限规则ID',
33+
comment='数据规则ID',
3434
),
3535
)

backend/app/admin/model/role.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,5 +34,5 @@ class Role(Base):
3434
# 角色菜单多对多
3535
menus: Mapped[list[Menu]] = relationship(init=False, secondary=sys_role_menu, back_populates='roles')
3636

37-
# 角色数据权限规则多对多
37+
# 角色数据规则多对多
3838
rules: Mapped[list[DataRule]] = relationship(init=False, secondary=sys_role_data_rule, back_populates='roles')

backend/app/admin/service/data_rule_service.py

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
# -*- coding: utf-8 -*-
33
from typing import Sequence
44

5-
from fastapi import Request
65
from sqlalchemy import Select
76

87
from backend.app.admin.crud.crud_data_rule import data_rule_dao
@@ -17,7 +16,7 @@
1716

1817

1918
class DataRuleService:
20-
"""数据权限规则服务类"""
19+
"""数据规则服务类"""
2120

2221
@staticmethod
2322
async def get(*, pk: int) -> DataRule:
@@ -50,19 +49,19 @@ async def get_role_rules(*, pk: int) -> list[int]:
5049

5150
@staticmethod
5251
async def get_models() -> list[str]:
53-
"""获取所有数据模型"""
52+
"""获取所有数据规则可用模型"""
5453
return list(settings.DATA_PERMISSION_MODELS.keys())
5554

5655
@staticmethod
5756
async def get_columns(model: str) -> list[str]:
5857
"""
59-
获取数据模型的字段列表
58+
获取数据规则可用模型的字段列表
6059
6160
:param model: 模型名称
6261
:return:
6362
"""
6463
if model not in settings.DATA_PERMISSION_MODELS:
65-
raise errors.NotFoundError(msg='数据模型不存在')
64+
raise errors.NotFoundError(msg='数据规则可用模型不存在')
6665
model_ins = dynamic_import_data_model(settings.DATA_PERMISSION_MODELS[model])
6766
model_columns = [
6867
key for key in model_ins.__table__.columns.keys() if key not in settings.DATA_PERMISSION_COLUMN_EXCLUDE
@@ -97,7 +96,7 @@ async def create(*, obj: CreateDataRuleParam) -> None:
9796
async with async_db_session.begin() as db:
9897
data_rule = await data_rule_dao.get_by_name(db, obj.name)
9998
if data_rule:
100-
raise errors.ForbiddenError(msg='数据权限规则已存在')
99+
raise errors.ForbiddenError(msg='数据规则已存在')
101100
await data_rule_dao.create(db, obj)
102101

103102
@staticmethod
@@ -112,22 +111,29 @@ async def update(*, pk: int, obj: UpdateDataRuleParam) -> int:
112111
async with async_db_session.begin() as db:
113112
data_rule = await data_rule_dao.get(db, pk)
114113
if not data_rule:
115-
raise errors.NotFoundError(msg='数据权限规则不存在')
114+
raise errors.NotFoundError(msg='数据规则不存在')
116115
count = await data_rule_dao.update(db, pk, obj)
116+
for role in await data_rule.awaitable_attrs.roles:
117+
for user in await role.awaitable_attrs.users:
118+
await redis_client.delete(f'{settings.JWT_USER_REDIS_PREFIX}:{user.id}')
117119
return count
118120

119121
@staticmethod
120-
async def delete(*, request: Request, pk: list[int]) -> int:
122+
async def delete(*, pk: list[int]) -> int:
121123
"""
122124
删除数据规则
123125
124-
:param request: FastAPI 请求对象
125126
:param pk: 规则 ID 列表
126127
:return:
127128
"""
128129
async with async_db_session.begin() as db:
129130
count = await data_rule_dao.delete(db, pk)
130-
await redis_client.delete(f'{settings.JWT_USER_REDIS_PREFIX}:{request.user.id}')
131+
for _pk in pk:
132+
data_rule = await data_rule_dao.get(db, _pk)
133+
if data_rule:
134+
for role in await data_rule.awaitable_attrs.roles:
135+
for user in await role.awaitable_attrs.users:
136+
await redis_client.delete(f'{settings.JWT_USER_REDIS_PREFIX}:{user.id}')
131137
return count
132138

133139

0 commit comments

Comments
 (0)