o
    "i                     @   st   d Z ddlmZ ddlmZmZ ddlmZ ddlm	Z	 ddl
mZ ddlmZ ddlZeeZG d	d
 d
ZdS )zc
Permission Template Service

Supports exporting, importing, and copying permission configurations
    )Session)DictList)Role)RolePermission)add_permission_for_role)AppExceptionNc                   @   s   e Zd ZdZg dZg dZedededede	fdd	Z
e	
ddededede	dedefddZedededededef
ddZdS )PermissionTemplateServicez)Service for managing permission templates)usersrolesknowledge_basesknowledge_categoriesknowledge_tagsagents	workflows	documents
audit_logsmenus	providersmodels)readcreateupdatedeleteexecuteviewdbrole_id	tenant_idreturnc                 C   sf   |  ttj|k }|stdd|  ttj|ktjdk	 }|j
|j|dd |D dS )z#Export role permissions as template   角色不存在Role not foundFc                 S   s   g | ]	}|j |jd qS )resourceactionr"   ).0perm r'   W/lsinfo/ai/hellotax_ai/base_platform/app/services/access/permission_template_service.py
<listcomp>,   s    zEPermissionTemplateService.export_role_permissions.<locals>.<listcomp>)	role_name	role_coder   permissions)queryr   filteridfirstr   r   r   
is_deletedallnamecode)r   r   r   roler,   r'   r'   r(   export_role_permissions   s    

z1PermissionTemplateService.export_role_permissionsFconfigreplacec                 C   s  |  ttj|k }|stdd|jrtdd|dg D ]:}|d}|d}|r2|s7tdd	|d
s\|t	j
vrLtd| d| |t	jvr\td| d| q"|rl|  ttj|k  |dg D ]@}|d}|d}|  ttj|ktj|ktj|ktjdk }	|	rqrt||||d}
| |
 td|j ||| qr|   td|  dS )z0Import permissions from template with validationr    r!   u   系统角色权限不可修改z*System role permissions cannot be modifiedr,   r#   r$   u   权限配置格式错误zInvalid permission formatzmenu:u   无效的资源: zInvalid resource: u   无效的操作: zInvalid action: F)r   r#   r$   r   zrole:u"   ✅ Imported permissions for role T)r-   r   r.   r/   r0   r   	is_systemget
startswithr	   VALID_RESOURCESVALID_ACTIONSr   r   r   r#   r$   r1   addr   r4   commitloggerinfo)r   r   r   r7   r8   r5   r&   r#   r$   existing	role_permr'   r'   r(   import_role_permissions5   sT   	











z1PermissionTemplateService.import_role_permissionsfrom_role_id
to_role_idc                 C   s"   t | ||}t j| |||ddS )z)Copy permissions from one role to anotherF)r8   )r	   r6   rD   )r   rE   rF   r   r7   r'   r'   r(   copy_permissionsx   s   	
z*PermissionTemplateService.copy_permissionsN)F)__name__
__module____qualname____doc__r<   r=   staticmethodr   intr   r6   boolrD   rG   r'   r'   r'   r(   r	      sB    Br	   )rK   sqlalchemy.ormr   typingr   r   app.models.roler   app.models.role_permissionr   app.core.permissionsr   app.core.exceptionsr   logging	getLoggerrH   r@   r	   r'   r'   r'   r(   <module>   s    
