Skip to content

Commit 0cbe635

Browse files
authored
Update superuser verify to dependency injection (#852)
* Update superuser verify to dependency injection * Update sql scripts
1 parent e923f13 commit 0cbe635

File tree

8 files changed

+85
-100
lines changed

8 files changed

+85
-100
lines changed

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

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,12 @@
22

33
from typing import Annotated
44

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

77
from backend.app.admin.schema.token import GetTokenDetail
88
from backend.common.enums import StatusType
99
from backend.common.response.response_schema import ResponseModel, ResponseSchemaModel, response_base
10-
from backend.common.security.jwt import DependsJwtAuth, jwt_decode, revoke_token, superuser_verify
11-
from backend.common.security.permission import RequestPermission
12-
from backend.common.security.rbac import DependsRBAC
10+
from backend.common.security.jwt import DependsJwtAuth, DependsSuperUser, jwt_decode, revoke_token
1311
from backend.core.conf import settings
1412
from backend.database.redis import redis_client
1513

@@ -75,16 +73,12 @@ def append_token_detail() -> None:
7573
@router.delete(
7674
'/{pk}',
7775
summary='强制下线',
78-
dependencies=[
79-
Depends(RequestPermission('sys:session:delete')),
80-
DependsRBAC,
81-
],
76+
dependencies=[DependsSuperUser],
8277
)
8378
async def delete_session(
8479
request: Request,
8580
pk: Annotated[int, Path(description='用户 ID')],
8681
session_uuid: Annotated[str, Query(description='会话 UUID')],
8782
) -> ResponseModel:
88-
superuser_verify(request)
8983
await revoke_token(pk, session_uuid)
9084
return response_base.success()

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

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
from backend.common.enums import UserPermissionType
1515
from backend.common.pagination import DependsPagination, PageData, paging_data
1616
from backend.common.response.response_schema import ResponseModel, ResponseSchemaModel, response_base
17-
from backend.common.security.jwt import DependsJwtAuth
17+
from backend.common.security.jwt import DependsJwtAuth, DependsSuperUser
1818
from backend.common.security.permission import RequestPermission
1919
from backend.common.security.rbac import DependsRBAC
2020
from backend.database.db import CurrentSession
@@ -62,26 +62,25 @@ async def get_users_paged(
6262
return response_base.success(data=page_data)
6363

6464

65-
@router.post('', summary='创建用户', dependencies=[DependsRBAC])
66-
async def create_user(request: Request, obj: AddUserParam) -> ResponseSchemaModel[GetUserInfoWithRelationDetail]:
67-
await user_service.create(request=request, obj=obj)
65+
@router.post('', summary='创建用户', dependencies=[DependsSuperUser])
66+
async def create_user(obj: AddUserParam) -> ResponseSchemaModel[GetUserInfoWithRelationDetail]:
67+
await user_service.create(obj=obj)
6868
data = await user_service.get_userinfo(username=obj.username)
6969
return response_base.success(data=data)
7070

7171

72-
@router.put('/{pk}', summary='更新用户信息', dependencies=[DependsRBAC])
72+
@router.put('/{pk}', summary='更新用户信息', dependencies=[DependsSuperUser])
7373
async def update_user(
74-
request: Request,
7574
pk: Annotated[int, Path(description='用户 ID')],
7675
obj: UpdateUserParam,
7776
) -> ResponseModel:
78-
count = await user_service.update(request=request, pk=pk, obj=obj)
77+
count = await user_service.update(pk=pk, obj=obj)
7978
if count > 0:
8079
return response_base.success()
8180
return response_base.fail()
8281

8382

84-
@router.put('/{pk}/permissions', summary='更新用户权限', dependencies=[DependsRBAC])
83+
@router.put('/{pk}/permissions', summary='更新用户权限', dependencies=[DependsSuperUser])
8584
async def update_user_permission(
8685
request: Request,
8786
pk: Annotated[int, Path(description='用户 ID')],
@@ -101,13 +100,12 @@ async def update_user_password(request: Request, obj: ResetPasswordParam) -> Res
101100
return response_base.fail()
102101

103102

104-
@router.put('/{pk}/password', summary='重置用户密码', dependencies=[DependsRBAC])
103+
@router.put('/{pk}/password', summary='重置用户密码', dependencies=[DependsSuperUser])
105104
async def reset_user_password(
106-
request: Request,
107105
pk: Annotated[int, Path(description='用户 ID')],
108106
password: Annotated[str, Body(embed=True, description='新密码')],
109107
) -> ResponseModel:
110-
count = await user_service.reset_password(request=request, pk=pk, password=password)
108+
count = await user_service.reset_password(pk=pk, password=password)
111109
if count > 0:
112110
return response_base.success()
113111
return response_base.fail()

backend/app/admin/service/user_service.py

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
from backend.common.enums import UserPermissionType
1818
from backend.common.exception import errors
1919
from backend.common.response.response_code import CustomErrorCode
20-
from backend.common.security.jwt import get_token, jwt_decode, password_verify, superuser_verify
20+
from backend.common.security.jwt import get_token, jwt_decode, password_verify
2121
from backend.core.conf import settings
2222
from backend.database.db import async_db_session
2323
from backend.database.redis import redis_client
@@ -69,16 +69,14 @@ async def get_select(*, dept: int, username: str, phone: str, status: int) -> Se
6969
return await user_dao.get_list(dept=dept, username=username, phone=phone, status=status)
7070

7171
@staticmethod
72-
async def create(*, request: Request, obj: AddUserParam) -> None:
72+
async def create(*, obj: AddUserParam) -> None:
7373
"""
7474
创建用户
7575
76-
:param request: FastAPI 请求对象
7776
:param obj: 用户添加参数
7877
:return:
7978
"""
8079
async with async_db_session.begin() as db:
81-
superuser_verify(request)
8280
if await user_dao.get_by_username(db, obj.username):
8381
raise errors.ConflictError(msg='用户名已注册')
8482
obj.nickname = obj.nickname or f'#{random.randrange(88888, 99999)}'
@@ -92,17 +90,15 @@ async def create(*, request: Request, obj: AddUserParam) -> None:
9290
await user_dao.add(db, obj)
9391

9492
@staticmethod
95-
async def update(*, request: Request, pk: int, obj: UpdateUserParam) -> int:
93+
async def update(*, pk: int, obj: UpdateUserParam) -> int:
9694
"""
9795
更新用户信息
9896
99-
:param request: FastAPI 请求对象
10097
:param pk: 用户 ID
10198
:param obj: 用户更新参数
10299
:return:
103100
"""
104101
async with async_db_session.begin() as db:
105-
superuser_verify(request)
106102
user = await user_dao.get_with_relation(db, user_id=pk)
107103
if not user:
108104
raise errors.NotFoundError(msg='用户不存在')
@@ -126,7 +122,6 @@ async def update_permission(*, request: Request, pk: int, type: UserPermissionTy
126122
:return:
127123
"""
128124
async with async_db_session.begin() as db:
129-
superuser_verify(request)
130125
match type:
131126
case UserPermissionType.superuser:
132127
user = await user_dao.get(db, pk)
@@ -178,17 +173,15 @@ async def update_permission(*, request: Request, pk: int, type: UserPermissionTy
178173
return count
179174

180175
@staticmethod
181-
async def reset_password(*, request: Request, pk: int, password: str) -> int:
176+
async def reset_password(*, pk: int, password: str) -> int:
182177
"""
183178
重置用户密码
184179
185-
:param request: FastAPI 请求对象
186180
:param pk: 用户 ID
187181
:param password: 新密码
188182
:return:
189183
"""
190184
async with async_db_session.begin() as db:
191-
superuser_verify(request)
192185
user = await user_dao.get(db, pk)
193186
if not user:
194187
raise errors.NotFoundError(msg='用户不存在')

backend/common/security/jwt.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -265,7 +265,7 @@ async def get_current_user(db: AsyncSession, pk: int) -> User:
265265

266266
def superuser_verify(request: Request) -> bool:
267267
"""
268-
验证当前用户权限
268+
验证当前用户超级管理员权限
269269
270270
:param request: FastAPI 请求对象
271271
:return:
@@ -307,3 +307,7 @@ async def jwt_authentication(token: str) -> GetUserInfoWithRelationDetail:
307307
# https://docs.pydantic.dev/latest/concepts/json/#partial-json-parsing
308308
user = GetUserInfoWithRelationDetail.model_validate(from_json(cache_user, allow_partial=True))
309309
return user
310+
311+
312+
# 超级管理员鉴权依赖注入
313+
DependsSuperUser = Depends(superuser_verify)

backend/sql/mysql/init_snowflake_test_data.sql

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,6 @@ values
4949
(2049629108253622272, '清空', 'EmptyOperaLog', null, 0, null, 2, null, 'log:opera:clear', 1, 0, 1, '', null, 2049629108249427990, '2025-06-26 20:29:06', null),
5050
(2049629108253622273, 'page.menu.monitor', 'Monitor', '/monitor', 4, 'mdi:monitor-eye', 0, null, null, 1, 1, 1, '', null, null, '2025-06-26 20:29:06', null),
5151
(2049629108253622274, 'page.menu.online', 'Online', '/log/online', 1, 'wpf:online', 1, '/monitor/online/index', null, 1, 1, 1, '', null, 2049629108253622273, '2025-06-26 20:29:06', null),
52-
(2049629108253622275, '下线', 'KickOutOnline', null, 0, null, 2, null, 'sys:session:delete', 1, 0, 1, '', null, 2049629108253622274, '2025-06-26 20:29:06', null),
5352
(2049629108253622276, 'page.menu.redis', 'Redis', '/monitor/redis', 2, 'devicon:redis', 1, '/monitor/redis/index', null, 1, 1, 1, '', null, 2049629108253622273, '2025-06-26 20:29:06', null),
5453
(2049629108253622277, 'page.menu.server', 'Server', '/monitor/server', 3, 'mdi:server-outline', 1, '/monitor/server/index', null, 1, 1, 1, '', null, 2049629108253622273, '2025-06-26 20:29:06', null),
5554
(2049629108253622278, '项目', 'Project', '/fba', 5, 'https://wu-clan.github.io/picx-images-hosting/logo/fba.png', 0, null, null, 1, 1, 1, '', null, null, '2025-06-26 20:29:06', null),

backend/sql/mysql/init_test_data.sql

Lines changed: 32 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -49,38 +49,37 @@ values
4949
(44, '清空', 'EmptyOperaLog', null, 0, null, 2, null, 'log:opera:clear', 1, 0, 1, '', null, 42, '2025-06-26 20:29:06', null),
5050
(45, 'page.menu.monitor', 'Monitor', '/monitor', 4, 'mdi:monitor-eye', 0, null, null, 1, 1, 1, '', null, null, '2025-06-26 20:29:06', null),
5151
(46, 'page.menu.online', 'Online', '/log/online', 1, 'wpf:online', 1, '/monitor/online/index', null, 1, 1, 1, '', null, 45, '2025-06-26 20:29:06', null),
52-
(47, '下线', 'KickOutOnline', null, 0, null, 2, null, 'sys:session:delete', 1, 0, 1, '', null, 46, '2025-06-26 20:29:06', null),
53-
(48, 'page.menu.redis', 'Redis', '/monitor/redis', 2, 'devicon:redis', 1, '/monitor/redis/index', null, 1, 1, 1, '', null, 45, '2025-06-26 20:29:06', null),
54-
(49, 'page.menu.server', 'Server', '/monitor/server', 3, 'mdi:server-outline', 1, '/monitor/server/index', null, 1, 1, 1, '', null, 45, '2025-06-26 20:29:06', null),
55-
(50, '项目', 'Project', '/fba', 5, 'https://wu-clan.github.io/picx-images-hosting/logo/fba.png', 0, null, null, 1, 1, 1, '', null, null, '2025-06-26 20:29:06', null),
56-
(51, '文档', 'Document', '/fba/document', 1, 'lucide:book-open-text', 4, '/_core/fallback/iframe.vue', null, 1, 1, 1, 'https://fastapi-practices.github.io/fastapi_best_architecture_docs', null, 50, '2025-06-26 20:29:06', null),
57-
(52, 'Github', 'Github', '/fba/github', 2, 'ant-design:github-filled', 4, '/_core/fallback/iframe.vue', null, 1, 1, 1, 'https://github.com/fastapi-practices/fastapi_best_architecture', null, 50, '2025-06-26 20:29:06', null),
58-
(53, 'Apifox', 'Apifox', '/fba/apifox', 3, 'simple-icons:apifox', 3, '/_core/fallback/iframe.vue', null, 1, 1, 1, 'https://apifox.com/apidoc/shared-28a93f02-730b-4f33-bb5e-4dad92058cc0', null, 50, '2025-06-26 20:29:06', null),
59-
(54, 'page.menu.profile', 'Profile', '/profile', 6, 'ant-design:profile-outlined', 1, '/_core/profile/index', null, 1, 0, 1, '', null, null, '2025-06-26 20:29:06', null),
60-
(55, 'config.menu', 'PluginConfig', '/plugins/config', 7, 'codicon:symbol-parameter', 1, '/plugins/config/views/index', null, 1, 1, 1, '', null, 4, '2025-06-26 20:29:06', '2025-06-26 20:34:51'),
61-
(56, '新增', 'AddConfig', null, 0, null, 2, null, 'sys:config:add', 1, 0, 1, '', null, 55, '2025-06-26 20:29:06', null),
62-
(57, '修改', 'EditConfig', null, 0, null, 2, null, 'sys:config:edit', 1, 0, 1, '', null, 55, '2025-06-26 20:29:06', null),
63-
(58, '删除', 'DeleteConfig', null, 0, null, 2, null, 'sys:config:del', 1, 0, 1, '', null, 55, '2025-06-26 20:29:06', null),
64-
(59, 'dict.menu', 'PluginDict', '/plugins/dict', 8, 'fluent-mdl2:dictionary', 1, '/plugins/dict/views/index', null, 1, 1, 1, '', null, 4, '2025-06-26 20:29:06', '2025-06-26 20:35:07'),
65-
(60, '新增类型', 'AddDictType', null, 0, null, 2, null, 'dict:type:add', 1, 0, 1, '', null, 59, '2025-06-26 20:29:06', null),
66-
(61, '修改类型', 'EditDictType', null, 0, null, 2, null, 'dict:type:edit', 1, 0, 1, '', null, 59, '2025-06-26 20:29:06', null),
67-
(62, '删除类型', 'DeleteDictType', null, 0, null, 2, null, 'dict:type:del', 1, 0, 1, '', null, 59, '2025-06-26 20:29:06', null),
68-
(63, '新增数据', 'AddDictData', null, 0, null, 2, null, 'dict:data:add', 1, 0, 1, '', null, 59, '2025-06-26 20:29:06', null),
69-
(64, '修改数据', 'EditDictData', null, 0, null, 2, null, 'dict:data:edit', 1, 0, 1, '', null, 59, '2025-06-26 20:29:06', null),
70-
(65, '删除数据', 'DeleteDictData', null, 0, null, 2, null, 'dict:data:del', 1, 0, 1, '', null, 59, '2025-06-26 20:29:06', null),
71-
(66, 'notice.menu', 'PluginNotice', '/plugins/notice', 9, 'fe:notice-push', 1, '/plugins/notice/views/index', null, 1, 1, 1, '', null, 4, '2025-06-26 20:29:06', '2025-06-26 20:35:14'),
72-
(67, '新增', 'AddNotice', null, 0, null, 2, null, 'sys:notice:add', 1, 0, 1, '', null, 66, '2025-06-26 20:29:06', null),
73-
(68, '修改', 'EditNotice', null, 0, null, 2, null, 'sys:notice:edit', 1, 0, 1, '', null, 66, '2025-06-26 20:29:06', null),
74-
(69, '删除', 'DeleteNotice', null, 0, null, 2, null, 'sys:notice:del', 1, 0, 1, '', null, 66, '2025-06-26 20:29:06', null),
75-
(70, 'code_generator.menu', 'PluginCodeGenerator', '/plugins/code-generator', 10, 'tabler:code', 1, '/plugins/code_generator/views/index', null, 1, 1, 1, '', null, null, '2025-06-26 20:29:06', '2025-06-26 20:35:25'),
76-
(71, '新增业务', 'AddGenCodeBusiness', '', 0, null, 2, null, 'codegen:business:add', 1, 0, 1, '', null, 70, '2025-06-26 20:29:06', '2025-06-26 20:45:16'),
77-
(72, '修改业务', 'EditGenCodeBusiness', null, 0, null, 2, null, 'codegen:business:edit', 1, 0, 1, '', null, 70, '2025-06-26 20:29:06', null),
78-
(73, '删除业务', 'DeleteGenCodeBusiness', null, 0, null, 2, null, 'codegen:business:del', 1, 0, 1, '', null, 70, '2025-06-26 20:29:06', null),
79-
(74, '新增模型', 'AddGenCodeModel', null, 0, null, 2, null, 'codegen:model:add', 1, 0, 1, '', null, 70, '2025-06-26 20:29:06', null),
80-
(75, '修改模型', 'EditGenCodeModel', null, 0, null, 2, null, 'codegen:model:edit', 1, 0, 1, '', null, 70, '2025-06-26 20:29:06', null),
81-
(76, '删除模型', 'DeleteGenCodeModel', null, 0, null, 2, null, 'codegen:model:del', 1, 0, 1, '', null, 70, '2025-06-26 20:29:06', null),
82-
(77, '导入', 'ImportGenCode', null, 0, null, 2, null, 'codegen:table:import', 1, 0, 1, '', null, 70, '2025-06-26 20:29:06', null),
83-
(78, '写入', 'WriteGenCode', null, 0, null, 2, null, 'codegen:local:write', 1, 0, 1, '', null, 70, '2025-06-26 20:29:06', null);
52+
(47, 'page.menu.redis', 'Redis', '/monitor/redis', 2, 'devicon:redis', 1, '/monitor/redis/index', null, 1, 1, 1, '', null, 45, '2025-06-26 20:29:06', null),
53+
(48, 'page.menu.server', 'Server', '/monitor/server', 3, 'mdi:server-outline', 1, '/monitor/server/index', null, 1, 1, 1, '', null, 45, '2025-06-26 20:29:06', null),
54+
(49, '项目', 'Project', '/fba', 5, 'https://wu-clan.github.io/picx-images-hosting/logo/fba.png', 0, null, null, 1, 1, 1, '', null, null, '2025-06-26 20:29:06', null),
55+
(50, '文档', 'Document', '/fba/document', 1, 'lucide:book-open-text', 4, '/_core/fallback/iframe.vue', null, 1, 1, 1, 'https://fastapi-practices.github.io/fastapi_best_architecture_docs', null, 49, '2025-06-26 20:29:06', null),
56+
(51, 'Github', 'Github', '/fba/github', 2, 'ant-design:github-filled', 4, '/_core/fallback/iframe.vue', null, 1, 1, 1, 'https://github.com/fastapi-practices/fastapi_best_architecture', null, 49, '2025-06-26 20:29:06', null),
57+
(52, 'Apifox', 'Apifox', '/fba/apifox', 3, 'simple-icons:apifox', 3, '/_core/fallback/iframe.vue', null, 1, 1, 1, 'https://apifox.com/apidoc/shared-28a93f02-730b-4f33-bb5e-4dad92058cc0', null, 49, '2025-06-26 20:29:06', null),
58+
(53, 'page.menu.profile', 'Profile', '/profile', 6, 'ant-design:profile-outlined', 1, '/_core/profile/index', null, 1, 0, 1, '', null, null, '2025-06-26 20:29:06', null),
59+
(54, 'config.menu', 'PluginConfig', '/plugins/config', 7, 'codicon:symbol-parameter', 1, '/plugins/config/views/index', null, 1, 1, 1, '', null, 4, '2025-06-26 20:29:06', '2025-06-26 20:34:51'),
60+
(55, '新增', 'AddConfig', null, 0, null, 2, null, 'sys:config:add', 1, 0, 1, '', null, 54, '2025-06-26 20:29:06', null),
61+
(56, '修改', 'EditConfig', null, 0, null, 2, null, 'sys:config:edit', 1, 0, 1, '', null, 54, '2025-06-26 20:29:06', null),
62+
(57, '删除', 'DeleteConfig', null, 0, null, 2, null, 'sys:config:del', 1, 0, 1, '', null, 54, '2025-06-26 20:29:06', null),
63+
(58, 'dict.menu', 'PluginDict', '/plugins/dict', 8, 'fluent-mdl2:dictionary', 1, '/plugins/dict/views/index', null, 1, 1, 1, '', null, 4, '2025-06-26 20:29:06', '2025-06-26 20:35:07'),
64+
(59, '新增类型', 'AddDictType', null, 0, null, 2, null, 'dict:type:add', 1, 0, 1, '', null, 58, '2025-06-26 20:29:06', null),
65+
(60, '修改类型', 'EditDictType', null, 0, null, 2, null, 'dict:type:edit', 1, 0, 1, '', null, 58, '2025-06-26 20:29:06', null),
66+
(61, '删除类型', 'DeleteDictType', null, 0, null, 2, null, 'dict:type:del', 1, 0, 1, '', null, 58, '2025-06-26 20:29:06', null),
67+
(62, '新增数据', 'AddDictData', null, 0, null, 2, null, 'dict:data:add', 1, 0, 1, '', null, 58, '2025-06-26 20:29:06', null),
68+
(63, '修改数据', 'EditDictData', null, 0, null, 2, null, 'dict:data:edit', 1, 0, 1, '', null, 58, '2025-06-26 20:29:06', null),
69+
(64, '删除数据', 'DeleteDictData', null, 0, null, 2, null, 'dict:data:del', 1, 0, 1, '', null, 58, '2025-06-26 20:29:06', null),
70+
(65, 'notice.menu', 'PluginNotice', '/plugins/notice', 9, 'fe:notice-push', 1, '/plugins/notice/views/index', null, 1, 1, 1, '', null, 4, '2025-06-26 20:29:06', '2025-06-26 20:35:14'),
71+
(66, '新增', 'AddNotice', null, 0, null, 2, null, 'sys:notice:add', 1, 0, 1, '', null, 65, '2025-06-26 20:29:06', null),
72+
(67, '修改', 'EditNotice', null, 0, null, 2, null, 'sys:notice:edit', 1, 0, 1, '', null, 65, '2025-06-26 20:29:06', null),
73+
(68, '删除', 'DeleteNotice', null, 0, null, 2, null, 'sys:notice:del', 1, 0, 1, '', null, 65, '2025-06-26 20:29:06', null),
74+
(69, 'code_generator.menu', 'PluginCodeGenerator', '/plugins/code-generator', 10, 'tabler:code', 1, '/plugins/code_generator/views/index', null, 1, 1, 1, '', null, null, '2025-06-26 20:29:06', '2025-06-26 20:35:25'),
75+
(70, '新增业务', 'AddGenCodeBusiness', '', 0, null, 2, null, 'codegen:business:add', 1, 0, 1, '', null, 69, '2025-06-26 20:29:06', '2025-06-26 20:45:16'),
76+
(71, '修改业务', 'EditGenCodeBusiness', null, 0, null, 2, null, 'codegen:business:edit', 1, 0, 1, '', null, 69, '2025-06-26 20:29:06', null),
77+
(72, '删除业务', 'DeleteGenCodeBusiness', null, 0, null, 2, null, 'codegen:business:del', 1, 0, 1, '', null, 69, '2025-06-26 20:29:06', null),
78+
(73, '新增模型', 'AddGenCodeModel', null, 0, null, 2, null, 'codegen:model:add', 1, 0, 1, '', null, 69, '2025-06-26 20:29:06', null),
79+
(74, '修改模型', 'EditGenCodeModel', null, 0, null, 2, null, 'codegen:model:edit', 1, 0, 1, '', null, 69, '2025-06-26 20:29:06', null),
80+
(75, '删除模型', 'DeleteGenCodeModel', null, 0, null, 2, null, 'codegen:model:del', 1, 0, 1, '', null, 69, '2025-06-26 20:29:06', null),
81+
(76, '导入', 'ImportGenCode', null, 0, null, 2, null, 'codegen:table:import', 1, 0, 1, '', null, 69, '2025-06-26 20:29:06', null),
82+
(77, '写入', 'WriteGenCode', null, 0, null, 2, null, 'codegen:local:write', 1, 0, 1, '', null, 69, '2025-06-26 20:29:06', null);
8483

8584
insert into sys_role (id, name, status, is_filter_scopes, remark, created_time, updated_time)
8685
values (1, '测试', 1, 1, null, now(), null);
@@ -90,7 +89,7 @@ values
9089
(1, 1, 1),
9190
(2, 1, 2),
9291
(3, 1, 3),
93-
(4, 1, 54);
92+
(4, 1, 53);
9493

9594
insert into sys_user (id, uuid, username, nickname, password, salt, email, is_superuser, is_staff, status, is_multi_login, avatar, phone, join_time, last_login_time, dept_id, created_time, updated_time)
9695
values

0 commit comments

Comments
 (0)