1010from fastapi_amis_admin .crud .schema import BaseApiOut
1111from fastapi_amis_admin .models import Field
1212from fastapi_amis_admin .utils .pydantic import ModelField
13+ from fastapi_amis_admin .utils .translation import i18n as _
1314from pydantic import BaseModel
1415from starlette .requests import Request
1516from starlette .responses import RedirectResponse
@@ -39,7 +40,7 @@ def get_admin_select_permission_rows(admin: PageSchemaAdmin) -> List[Dict[str, A
3940 for perm in admin .select_permissions :
4041 rows .append (
4142 {
42- "label" : "Data only-" + perm .label , # 仅限数据
43+ "label" : _ ( "Data only" ) + " -" + perm .label , # 仅限数据
4344 "rol" : f"{ admin .unique_id } #page:select:{ perm .name } #page:select" ,
4445 "reverse" : perm .reverse ,
4546 }
@@ -69,7 +70,7 @@ def get_admin_field_permission_rows(admin: PageSchemaAdmin, action: str) -> List
6970 return []
7071 rows .append (
7172 {
72- "label" : "All" , # 全部
73+ "label" : _ ( "All" ) , # 全部
7374 "rol" : f"{ admin .unique_id } #page:{ action } :*#page:{ action } " ,
7475 }
7576 )
@@ -93,7 +94,7 @@ def __init__(self, admin, **kwargs):
9394 elif self .admin .model .__table__ .name == User .__tablename__ :
9495 self ._subject = "u"
9596 else :
96- raise Exception ("Main model not supported yet" ) # 暂不支持的主体模型
97+ raise Exception (_ ( "Subject model not supported yet") ) # 暂不支持的主体模型
9798
9899 async def get_subject_by_id (self , item_id : str ) -> str :
99100 # 从数据库获取用户选择的数据列表
@@ -117,23 +118,23 @@ class UpdateSubRolesAction(BaseSubAction):
117118 action = ActionType .Dialog (
118119 name = "update_subject_roles" ,
119120 icon = "fa fa-check" ,
120- tooltip = "Set up roles" , # 设置角色
121+ tooltip = _ ( "Set up roles" ) , # 设置角色
121122 dialog = amis .Dialog (),
122123 level = LevelEnum .warning ,
123124 )
124125
125126 class schema (BaseModel ):
126127 role_keys : str = Field (
127128 "" ,
128- title = "role list" , # 角色列表
129+ title = _ ( "role list" ) , # 角色列表
129130 amis_form_item = amis .Transfer (
130131 selectMode = "table" ,
131132 resultListModeFollowSelect = True ,
132133 columns = [
133134 # {"name": "key", "label": "角色标识"},
134- {"name" : "name" , "label" : "Role Name" }, # 角色名称
135- {"name" : "desc" , "label" : "Role description" }, # 角色描述
136- {"name" : "role_names" , "label" : "sub-role" }, # 子角色
135+ {"name" : "name" , "label" : _ ( "Role Name" ) }, # 角色名称
136+ {"name" : "desc" , "label" : _ ( "Role description" ) }, # 角色描述
137+ {"name" : "role_names" , "label" : _ ( "sub-role" ) }, # 子角色
137138 ],
138139 source = "" ,
139140 valueField = "key" ,
@@ -158,18 +159,18 @@ async def get_init_data(self, request: Request, **kwargs) -> BaseApiOut[Any]:
158159 return BaseApiOut (data = self .schema ())
159160 subject = await self .get_subject_by_id (item_id )
160161 if not subject :
161- return BaseApiOut (status = 0 , msg = "Models not supported yet" ) # 暂不支持的模型
162+ return BaseApiOut (status = 0 , msg = _ ( "Models not supported yet" ) ) # 暂不支持的模型
162163 role_keys = await self .site .auth .enforcer .get_roles_for_user (subject )
163164 return BaseApiOut (data = self .schema (role_keys = "," .join (role_keys ).replace ("r:" , "" )))
164165
165166 async def handle (self , request : Request , item_id : List [str ], data : schema , ** kwargs ):
166167 """更新角色Casbin权限"""
167168 subject = await self .get_subject_by_id (item_id [0 ])
168169 if not subject :
169- return BaseApiOut (status = 0 , msg = "Models not supported yet" ) # 暂不支持的模型
170+ return BaseApiOut (status = 0 , msg = _ ( "Models not supported yet" ) ) # 暂不支持的模型
170171 identity = await self .site .auth .get_current_user_identity (request ) or SystemUserEnum .GUEST
171172 if subject == "u:" + identity :
172- return BaseApiOut (status = 0 , msg = "Cannot modify own permissions" ) # 不能修改自己的权限
173+ return BaseApiOut (status = 0 , msg = _ ( "Cannot modify own permissions" ) ) # 不能修改自己的权限
173174 enforcer : AsyncEnforcer = self .site .auth .enforcer
174175 role_keys = [f"r:{ role } " for role in data .role_keys .split ("," ) if role ]
175176 if role_keys and identity not in [SystemUserEnum .ROOT , SystemUserEnum .ADMIN ]:
@@ -190,7 +191,7 @@ class BaseSubPermAction(BaseSubAction):
190191 action = ActionType .Dialog (
191192 name = "view_subject_permissions" ,
192193 icon = "fa fa-check" ,
193- tooltip = "View permissions" , # 查看权限
194+ tooltip = _ ( "View permissions" ) , # 查看权限
194195 dialog = amis .Dialog (),
195196 level = LevelEnum .warning ,
196197 )
@@ -199,7 +200,7 @@ class BaseSubPermAction(BaseSubAction):
199200 class schema (BaseModel ):
200201 permissions : str = Field (
201202 "" ,
202- title = "Permission list" , # 权限列表
203+ title = _ ( "Permission list" ) , # 权限列表
203204 amis_form_item = amis .InputTree (
204205 multiple = True ,
205206 source = "" ,
@@ -236,7 +237,7 @@ class ViewSubPagePermAction(BaseSubPermAction):
236237 action = ActionType .Dialog (
237238 name = "view_subject_page_permissions" ,
238239 icon = "fa fa-check" ,
239- tooltip = "View page permissions" , # 查看页面权限
240+ tooltip = _ ( "View page permissions" ) , # 查看页面权限
240241 dialog = amis .Dialog (actions = []),
241242 level = LevelEnum .warning ,
242243 )
@@ -254,14 +255,13 @@ async def get_init_data(self, request: Request, **kwargs) -> BaseApiOut[Any]:
254255 return BaseApiOut (data = self .schema ())
255256 subject = await self .get_subject_by_id (item_id )
256257 if not subject :
257- return BaseApiOut (status = 0 , msg = "Models not supported yet" ) # 暂不支持的模型
258- permissions = await get_subject_page_permissions (self .site .auth .enforcer , subject = subject ,
259- implicit = self ._implicit )
258+ return BaseApiOut (status = 0 , msg = _ ("Models not supported yet" )) # 暂不支持的模型
259+ permissions = await get_subject_page_permissions (self .site .auth .enforcer , subject = subject , implicit = self ._implicit )
260260 permissions = [perm .replace ("#allow" , "" ) for perm in permissions if perm .endswith ("#allow" )]
261261 return BaseApiOut (data = self .schema (permissions = "," .join (permissions )))
262262
263263 async def handle (self , request : Request , item_id : List [str ], data : BaseModel , ** kwargs ):
264- return BaseApiOut (status = 1 , msg = "Please update settings through [Setting Permissions]!" ) # 请通过的【设置权限】更新设置!
264+ return BaseApiOut (status = 1 , msg = _ ( "Please update settings through [Setting Permissions]!" ) ) # 请通过的【设置权限】更新设置!
265265
266266
267267class UpdateSubDataPermAction (BaseSubPermAction ):
@@ -272,18 +272,18 @@ class UpdateSubDataPermAction(BaseSubPermAction):
272272 action = ActionType .Dialog (
273273 name = "update_subject_data_permissions" ,
274274 icon = "fa fa-gavel" ,
275- tooltip = "Update data permissions" , # 更新数据权限
276- dialog = amis .Dialog (actions = [amis .Action (actionType = "submit" , label = "Submit" , close = False , primary = True )]), # 保存
275+ tooltip = _ ( "Update data permissions" ) , # 更新数据权限
276+ dialog = amis .Dialog (actions = [amis .Action (actionType = "submit" , label = _ ( "Save" ) , close = False , primary = True )]), # 保存
277277 level = LevelEnum .warning ,
278278 )
279279
280280 # 创建动作表单数据模型
281281 class schema (BaseSubPermAction .schema ):
282282 effect_matrix : list = Field (
283283 [],
284- title = "Current permissions" , # 当前权限
284+ title = _ ( "Current permissions" ) , # 当前权限
285285 amis_form_item = amis .MatrixCheckboxes (
286- rowLabel = "Permission name" , # 权限名称
286+ rowLabel = _ ( "Permission name" ) , # 权限名称
287287 multiple = False ,
288288 singleSelectMode = "row" ,
289289 source = "" ,
@@ -292,9 +292,9 @@ class schema(BaseSubPermAction.schema):
292292 )
293293 policy_matrix : list = Field (
294294 [],
295- title = "Rights Profile" , # 权限配置
295+ title = _ ( "Rights Profile" ) , # 权限配置
296296 amis_form_item = amis .MatrixCheckboxes (
297- rowLabel = "Name" , # 名称
297+ rowLabel = _ ( "Name" ) , # 名称
298298 multiple = False ,
299299 singleSelectMode = "row" ,
300300 yCheckAll = True ,
@@ -327,22 +327,22 @@ async def _get_admin_action_options(request: Request, item_id: str):
327327
328328 @self .router .get ("/get_admin_action_perm_options" , response_model = BaseApiOut )
329329 async def get_admin_action_perm_options (
330- request : Request ,
331- permission : str = "" ,
332- item_id : str = "" ,
333- type : str = "policy" ,
330+ request : Request ,
331+ permission : str = "" ,
332+ item_id : str = "" ,
333+ type : str = "policy" ,
334334 ):
335335 columns = [
336336 {
337- "label" : "default" , # 默认
337+ "label" : _ ( "default" ) , # 默认
338338 "col" : "default" ,
339339 },
340340 {
341- "label" : "allow" , # 是
341+ "label" : _ ( "allow" ) , # 是
342342 "col" : "allow" ,
343343 },
344344 {
345- "label" : "deny" , # 否
345+ "label" : _ ( "deny" ) , # 否
346346 "col" : "deny" ,
347347 },
348348 ]
@@ -356,7 +356,7 @@ async def get_admin_action_perm_options(
356356 )
357357 if not permission :
358358 return out
359- unique_id , action , * _ = permission_decode (permission )
359+ unique_id , action , * a = permission_decode (permission )
360360 admin , parent = self .site .get_page_schema_child (unique_id )
361361 if not admin :
362362 return out
@@ -393,7 +393,7 @@ async def handle(self, request: Request, item_id: List[str], data: BaseModel, **
393393 subject = await self .get_subject_by_id (item_id [0 ])
394394 identity = await self .site .auth .get_current_user_identity (request ) or SystemUserEnum .GUEST
395395 if subject == "u:" + identity :
396- return BaseApiOut (status = 0 , msg = "Cannot modify own permissions" ) # 不能修改自己的权限
396+ return BaseApiOut (status = 0 , msg = _ ( "Cannot modify own permissions" ) ) # 不能修改自己的权限
397397 msg = await update_subject_data_permissions (
398398 self .site .auth .enforcer ,
399399 subject = subject ,
@@ -411,7 +411,7 @@ class UpdateSubPagePermsAction(ViewSubPagePermAction):
411411 action = ActionType .Dialog (
412412 name = "update_subject_page_permissions" ,
413413 icon = "fa fa-gavel" ,
414- tooltip = "Update page permissions" , # 更新页面权限
414+ tooltip = _ ( "Update page permissions" ) , # 更新页面权限
415415 dialog = amis .Dialog (),
416416 level = LevelEnum .warning ,
417417 )
@@ -420,10 +420,10 @@ async def handle(self, request: Request, item_id: List[str], data: BaseModel, **
420420 """更新角色Casbin权限"""
421421 subject = await self .get_subject_by_id (item_id [0 ])
422422 if not subject :
423- return BaseApiOut (status = 0 , msg = "Models not supported yet" ) # 暂不支持的模型
423+ return BaseApiOut (status = 0 , msg = _ ( "Models not supported yet" ) ) # 暂不支持的模型
424424 identity = await self .site .auth .get_current_user_identity (request ) or SystemUserEnum .GUEST
425425 if subject == "u:" + identity :
426- return BaseApiOut (status = 0 , msg = "Cannot modify own permissions" ) # 不能修改自己的权限
426+ return BaseApiOut (status = 0 , msg = _ ( "Cannot modify own permissions" ) ) # 不能修改自己的权限
427427 # 权限列表
428428 permissions = [perm for perm in data .permissions .split ("," ) if perm and perm .endswith ("#page" )] # 分割权限列表,去除空值
429429 enforcer : AsyncEnforcer = self .site .auth .enforcer
@@ -440,20 +440,20 @@ class CopyUserAuthLinkAction(ModelAction):
440440 action = amis .ActionType .Dialog (
441441 name = "copy_user_auth_link" ,
442442 icon = "fa fa-link" ,
443- tooltip = "User login-free link" , # 用户免登录链接
443+ tooltip = _ ( "User login-free link" ) , # 用户免登录链接
444444 level = amis .LevelEnum .danger ,
445445 dialog = amis .Dialog (
446446 size = amis .SizeEnum .md ,
447- title = "User login-free link" , # 用户免登录链接
447+ title = _ ( "User login-free link" ) , # 用户免登录链接
448448 ),
449449 )
450450 form_init = True
451451 form = amis .Form (static = True , disabled = True ) # type: ignore # 禁用表单
452452
453453 class schema (UsernameMixin , PkMixin ):
454454 auth_url : str = Field (
455- title = "Authorization link" , # 授权链接
456- description = "Copy the link to your browser and open it without logging in" , # 复制链接到浏览器打开即可免登录
455+ title = _ ( "Authorization link" ) , # 授权链接
456+ description = _ ( "Copy the link to your browser and open it without logging in" ) , # 复制链接到浏览器打开即可免登录
457457 amis_form_item = amis .Static (
458458 copyable = True ,
459459 ),
@@ -471,9 +471,8 @@ async def get_init_data(self, request: Request, **kwargs) -> BaseApiOut[Any]:
471471 }
472472 token = await auth .backend .token_store .write_token (token_data )
473473 return BaseApiOut (
474- msg = "Successful operation" , # 操作成功
475- data = {** token_data ,
476- "auth_url" : f"{ str (request .base_url )[:- 1 ]} { self .site .router_path } /login_by_token?token={ token } " },
474+ msg = _ ("Successful operation" ), # 操作成功
475+ data = {** token_data , "auth_url" : f"{ str (request .base_url )[:- 1 ]} { self .site .router_path } /login_by_token?token={ token } " },
477476 )
478477
479478 def register_router (self ):
0 commit comments