10
10
from fastapi_amis_admin .crud .schema import BaseApiOut
11
11
from fastapi_amis_admin .models import Field
12
12
from fastapi_amis_admin .utils .pydantic import ModelField
13
+ from fastapi_amis_admin .utils .translation import i18n as _
13
14
from pydantic import BaseModel
14
15
from starlette .requests import Request
15
16
from starlette .responses import RedirectResponse
@@ -39,7 +40,7 @@ def get_admin_select_permission_rows(admin: PageSchemaAdmin) -> List[Dict[str, A
39
40
for perm in admin .select_permissions :
40
41
rows .append (
41
42
{
42
- "label" : "仅限数据 -" + perm .label ,
43
+ "label" : _ ( "Data only" ) + " -" + perm .label , # 仅限数据
43
44
"rol" : f"{ admin .unique_id } #page:select:{ perm .name } #page:select" ,
44
45
"reverse" : perm .reverse ,
45
46
}
@@ -69,7 +70,7 @@ def get_admin_field_permission_rows(admin: PageSchemaAdmin, action: str) -> List
69
70
return []
70
71
rows .append (
71
72
{
72
- "label" : "全部" ,
73
+ "label" : _ ( "All" ), # 全部
73
74
"rol" : f"{ admin .unique_id } #page:{ action } :*#page:{ action } " ,
74
75
}
75
76
)
@@ -93,7 +94,7 @@ def __init__(self, admin, **kwargs):
93
94
elif self .admin .model .__table__ .name == User .__tablename__ :
94
95
self ._subject = "u"
95
96
else :
96
- raise Exception ("暂不支持的主体模型" )
97
+ raise Exception (_ ( "Subject model not supported yet" )) # 暂不支持的主体模型
97
98
98
99
async def get_subject_by_id (self , item_id : str ) -> str :
99
100
# 从数据库获取用户选择的数据列表
@@ -117,23 +118,23 @@ class UpdateSubRolesAction(BaseSubAction):
117
118
action = ActionType .Dialog (
118
119
name = "update_subject_roles" ,
119
120
icon = "fa fa-check" ,
120
- tooltip = "设置角色" ,
121
+ tooltip = _ ( "Set up roles" ), # 设置角色
121
122
dialog = amis .Dialog (),
122
123
level = LevelEnum .warning ,
123
124
)
124
125
125
126
class schema (BaseModel ):
126
127
role_keys : str = Field (
127
128
"" ,
128
- title = "角色列表" ,
129
+ title = _ ( "role list" ), # 角色列表
129
130
amis_form_item = amis .Transfer (
130
131
selectMode = "table" ,
131
132
resultListModeFollowSelect = True ,
132
133
columns = [
133
134
# {"name": "key", "label": "角色标识"},
134
- {"name" : "name" , "label" : "角色名称" },
135
- {"name" : "desc" , "label" : "角色描述" },
136
- {"name" : "role_names" , "label" : "子角色" },
135
+ {"name" : "name" , "label" : _ ( "Role Name" )}, # 角色名称
136
+ {"name" : "desc" , "label" : _ ( "Role description" )}, # 角色描述
137
+ {"name" : "role_names" , "label" : _ ( "sub-role" )}, # 子角色
137
138
],
138
139
source = "" ,
139
140
valueField = "key" ,
@@ -158,18 +159,18 @@ async def get_init_data(self, request: Request, **kwargs) -> BaseApiOut[Any]:
158
159
return BaseApiOut (data = self .schema ())
159
160
subject = await self .get_subject_by_id (item_id )
160
161
if not subject :
161
- return BaseApiOut (status = 0 , msg = "暂不支持的模型" )
162
+ return BaseApiOut (status = 0 , msg = _ ( "Models not supported yet" )) # 暂不支持的模型
162
163
role_keys = await self .site .auth .enforcer .get_roles_for_user (subject )
163
164
return BaseApiOut (data = self .schema (role_keys = "," .join (role_keys ).replace ("r:" , "" )))
164
165
165
166
async def handle (self , request : Request , item_id : List [str ], data : schema , ** kwargs ):
166
167
"""更新角色Casbin权限"""
167
168
subject = await self .get_subject_by_id (item_id [0 ])
168
169
if not subject :
169
- return BaseApiOut (status = 0 , msg = "暂不支持的模型" )
170
+ return BaseApiOut (status = 0 , msg = _ ( "Models not supported yet" )) # 暂不支持的模型
170
171
identity = await self .site .auth .get_current_user_identity (request ) or SystemUserEnum .GUEST
171
172
if subject == "u:" + identity :
172
- return BaseApiOut (status = 0 , msg = "不能修改自己的权限" )
173
+ return BaseApiOut (status = 0 , msg = _ ( "Cannot modify own permissions" )) # 不能修改自己的权限
173
174
enforcer : AsyncEnforcer = self .site .auth .enforcer
174
175
role_keys = [f"r:{ role } " for role in data .role_keys .split ("," ) if role ]
175
176
if role_keys and identity not in [SystemUserEnum .ROOT , SystemUserEnum .ADMIN ]:
@@ -190,7 +191,7 @@ class BaseSubPermAction(BaseSubAction):
190
191
action = ActionType .Dialog (
191
192
name = "view_subject_permissions" ,
192
193
icon = "fa fa-check" ,
193
- tooltip = "查看权限" ,
194
+ tooltip = _ ( "View permissions" ), # 查看权限
194
195
dialog = amis .Dialog (),
195
196
level = LevelEnum .warning ,
196
197
)
@@ -199,7 +200,7 @@ class BaseSubPermAction(BaseSubAction):
199
200
class schema (BaseModel ):
200
201
permissions : str = Field (
201
202
"" ,
202
- title = "权限列表" ,
203
+ title = _ ( "Permission list" ), # 权限列表
203
204
amis_form_item = amis .InputTree (
204
205
multiple = True ,
205
206
source = "" ,
@@ -236,7 +237,7 @@ class ViewSubPagePermAction(BaseSubPermAction):
236
237
action = ActionType .Dialog (
237
238
name = "view_subject_page_permissions" ,
238
239
icon = "fa fa-check" ,
239
- tooltip = "查看页面权限" ,
240
+ tooltip = _ ( "View page permissions" ), # 查看页面权限
240
241
dialog = amis .Dialog (actions = []),
241
242
level = LevelEnum .warning ,
242
243
)
@@ -254,13 +255,13 @@ async def get_init_data(self, request: Request, **kwargs) -> BaseApiOut[Any]:
254
255
return BaseApiOut (data = self .schema ())
255
256
subject = await self .get_subject_by_id (item_id )
256
257
if not subject :
257
- return BaseApiOut (status = 0 , msg = "暂不支持的模型" )
258
+ return BaseApiOut (status = 0 , msg = _ ( "Models not supported yet" )) # 暂不支持的模型
258
259
permissions = await get_subject_page_permissions (self .site .auth .enforcer , subject = subject , implicit = self ._implicit )
259
260
permissions = [perm .replace ("#allow" , "" ) for perm in permissions if perm .endswith ("#allow" )]
260
261
return BaseApiOut (data = self .schema (permissions = "," .join (permissions )))
261
262
262
263
async def handle (self , request : Request , item_id : List [str ], data : BaseModel , ** kwargs ):
263
- return BaseApiOut (status = 1 , msg = " 请通过的【设置权限】更新设置!" )
264
+ return BaseApiOut (status = 1 , msg = _ ( "Please update settings through [Setting Permissions]!" )) # 请通过的【设置权限】更新设置!
264
265
265
266
266
267
class UpdateSubDataPermAction (BaseSubPermAction ):
@@ -271,18 +272,18 @@ class UpdateSubDataPermAction(BaseSubPermAction):
271
272
action = ActionType .Dialog (
272
273
name = "update_subject_data_permissions" ,
273
274
icon = "fa fa-gavel" ,
274
- tooltip = "更新数据权限" ,
275
- dialog = amis .Dialog (actions = [amis .Action (actionType = "submit" , label = "保存" , close = False , primary = True )]),
275
+ tooltip = _ ( "Update data permissions" ), # 更新数据权限
276
+ dialog = amis .Dialog (actions = [amis .Action (actionType = "submit" , label = _ ( "Save" ) , close = False , primary = True )]), # 保存
276
277
level = LevelEnum .warning ,
277
278
)
278
279
279
280
# 创建动作表单数据模型
280
281
class schema (BaseSubPermAction .schema ):
281
282
effect_matrix : list = Field (
282
283
[],
283
- title = "当前权限" ,
284
+ title = _ ( "Current permissions" ), # 当前权限
284
285
amis_form_item = amis .MatrixCheckboxes (
285
- rowLabel = "权限名称" ,
286
+ rowLabel = _ ( "Permission name" ), # 权限名称
286
287
multiple = False ,
287
288
singleSelectMode = "row" ,
288
289
source = "" ,
@@ -291,9 +292,9 @@ class schema(BaseSubPermAction.schema):
291
292
)
292
293
policy_matrix : list = Field (
293
294
[],
294
- title = "权限配置" ,
295
+ title = _ ( "Rights Profile" ), # 权限配置
295
296
amis_form_item = amis .MatrixCheckboxes (
296
- rowLabel = "名称" ,
297
+ rowLabel = _ ( "Name" ), # 名称
297
298
multiple = False ,
298
299
singleSelectMode = "row" ,
299
300
yCheckAll = True ,
@@ -333,15 +334,15 @@ async def get_admin_action_perm_options(
333
334
):
334
335
columns = [
335
336
{
336
- "label" : "默认" ,
337
+ "label" : _ ( "default" ), # 默认
337
338
"col" : "default" ,
338
339
},
339
340
{
340
- "label" : "是" ,
341
+ "label" : _ ( "allow" ), # 是
341
342
"col" : "allow" ,
342
343
},
343
344
{
344
- "label" : "否" ,
345
+ "label" : _ ( "deny" ), # 否
345
346
"col" : "deny" ,
346
347
},
347
348
]
@@ -355,7 +356,7 @@ async def get_admin_action_perm_options(
355
356
)
356
357
if not permission :
357
358
return out
358
- unique_id , action , * _ = permission_decode (permission )
359
+ unique_id , action , * a = permission_decode (permission )
359
360
admin , parent = self .site .get_page_schema_child (unique_id )
360
361
if not admin :
361
362
return out
@@ -392,7 +393,7 @@ async def handle(self, request: Request, item_id: List[str], data: BaseModel, **
392
393
subject = await self .get_subject_by_id (item_id [0 ])
393
394
identity = await self .site .auth .get_current_user_identity (request ) or SystemUserEnum .GUEST
394
395
if subject == "u:" + identity :
395
- return BaseApiOut (status = 0 , msg = "不能修改自己的权限" )
396
+ return BaseApiOut (status = 0 , msg = _ ( "Cannot modify own permissions" )) # 不能修改自己的权限
396
397
msg = await update_subject_data_permissions (
397
398
self .site .auth .enforcer ,
398
399
subject = subject ,
@@ -410,7 +411,7 @@ class UpdateSubPagePermsAction(ViewSubPagePermAction):
410
411
action = ActionType .Dialog (
411
412
name = "update_subject_page_permissions" ,
412
413
icon = "fa fa-gavel" ,
413
- tooltip = "更新页面权限" ,
414
+ tooltip = _ ( "Update page permissions" ), # 更新页面权限
414
415
dialog = amis .Dialog (),
415
416
level = LevelEnum .warning ,
416
417
)
@@ -419,10 +420,10 @@ async def handle(self, request: Request, item_id: List[str], data: BaseModel, **
419
420
"""更新角色Casbin权限"""
420
421
subject = await self .get_subject_by_id (item_id [0 ])
421
422
if not subject :
422
- return BaseApiOut (status = 0 , msg = "暂不支持的模型" )
423
+ return BaseApiOut (status = 0 , msg = _ ( "Models not supported yet" )) # 暂不支持的模型
423
424
identity = await self .site .auth .get_current_user_identity (request ) or SystemUserEnum .GUEST
424
425
if subject == "u:" + identity :
425
- return BaseApiOut (status = 0 , msg = "不能修改自己的权限" )
426
+ return BaseApiOut (status = 0 , msg = _ ( "Cannot modify own permissions" )) # 不能修改自己的权限
426
427
# 权限列表
427
428
permissions = [perm for perm in data .permissions .split ("," ) if perm and perm .endswith ("#page" )] # 分割权限列表,去除空值
428
429
enforcer : AsyncEnforcer = self .site .auth .enforcer
@@ -439,20 +440,20 @@ class CopyUserAuthLinkAction(ModelAction):
439
440
action = amis .ActionType .Dialog (
440
441
name = "copy_user_auth_link" ,
441
442
icon = "fa fa-link" ,
442
- tooltip = "用户免登录链接" ,
443
+ tooltip = _ ( "User login-free link" ), # 用户免登录链接
443
444
level = amis .LevelEnum .danger ,
444
445
dialog = amis .Dialog (
445
446
size = amis .SizeEnum .md ,
446
- title = "用户免登录链接" ,
447
+ title = _ ( "User login-free link" ), # 用户免登录链接
447
448
),
448
449
)
449
450
form_init = True
450
451
form = amis .Form (static = True , disabled = True ) # type: ignore # 禁用表单
451
452
452
453
class schema (UsernameMixin , PkMixin ):
453
454
auth_url : str = Field (
454
- title = "授权链接" ,
455
- description = "复制链接到浏览器打开即可免登录" ,
455
+ title = _ ( "Authorization link" ), # 授权链接
456
+ description = _ ( "Copy the link to your browser and open it without logging in" ), # 复制链接到浏览器打开即可免登录
456
457
amis_form_item = amis .Static (
457
458
copyable = True ,
458
459
),
@@ -470,7 +471,7 @@ async def get_init_data(self, request: Request, **kwargs) -> BaseApiOut[Any]:
470
471
}
471
472
token = await auth .backend .token_store .write_token (token_data )
472
473
return BaseApiOut (
473
- msg = "操作成功" ,
474
+ msg = _ ( "Successful operation" ), # 操作成功
474
475
data = {** token_data , "auth_url" : f"{ str (request .base_url )[:- 1 ]} { self .site .router_path } /login_by_token?token={ token } " },
475
476
)
476
477
0 commit comments