
    Xj%                     
   d dl mZmZ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mZ d dlmZmZmZmZmZmZ d dlmZ d d	lmZ d d
lmZ d dlmZ  e            Z ee           Z!e"                    de#e                   d d eej$                   eej%                  fde&de&dedefd            Z'e(                    deej)                   eej$                   e e
                      fdededefd            Z*e"                    de           eej$                   eej%                  fde&dedefd            Z+e,                    de           eej$                   e e
                      fde&dededefd            Z-e.                    dej/                   eej$                   e e
                      fde&dedefd            Z0e"                    de#e&                    eej$                   eej%                  fde&dedefd            Z1e,                    de2           eej$                   e e
                      fde&de#e&         dedefd             Z3e(                    d!eej)                   eej$                   eej%                  fdededefd"            Z4e"                    d#e#e                    eej$                   eej%                  fdedefd$            Z5e,                    d%e           eej$                   eej%                  fde&dededefd&            Z6e.                    d%ej/                   eej$                   eej%                  fde&dedefd'            Z7e(                    d(e2           eej$                   eej%                  fde&d)ededefd*            Z8e"                    d(e#e                    eej$                   eej%                  fde&dedefd+            Z9e"                    d,e#e                    eej%                  fdefd-            Z:e"                    d.           eej$                   eej%                  fde&dedefd/            Z;e(                    d0          d1 eej$                   eej%                  fde&d2e2d3e<dedef
d4            Z=e(                    d5           eej$                   eej%                  fde&d6e&dedefd7            Z>d8S )9    )	APIRouterDependsHTTPExceptionstatus)Session)deps)require_platform_admin)role)User)ResourceInfo
RoleCreateRolePermissionResponseRolePermissionsUpdateRoleResponse
RoleUpdate)PermissionService)PermissionTemplateService)RoleService)
get_logger/)response_modeld   skiplimitdbcurrent_userc                 4    t          j        || |          }|S )N)r   r   )	crud_role	get_multi)r   r   r   r   roless        ?/lsinfo/ai/hellotax_ai/base_platform/app/api/v1/access/roles.py	get_rolesr"      s      U;;;EL    )r   status_coderole_inc                     t          j        || j                  }|rt          t          j        d          t          j        || |j                  }t          	                    |j        |j                  
                    d           |S )N)codez"Role with this code already existsr$   detail)obj_in
created_byuser_idrole_idzRole created)r   get_by_coder'   r   r   HTTP_400_BAD_REQUESTcreateidloggerbindinfo)r%   r   r   existingr
   s        r!   create_roler7   $   s     $Rgl;;;H 
3<`
 
 
 	
 Bw<?KKKD
KKK99>>~NNNKr#   z
/{role_id}r.   c                 l    t          j        ||           }|st          t          j        d          |S )Nr2   Role not foundr(   )r   getr   r   HTTP_404_NOT_FOUNDr.   r   r   r
   s       r!   get_roler>   4   s=     =(((D \(AJZ[[[[Kr#   c                 F   t          j        ||           }|st          t          j        d          |j        rt          t          j        d          t          j        |||          }t          	                    |j
        |                               d           |S )Nr9   r:   r(   System roles cannot be modified)db_objr*   r,   zRole updated)r   r;   r   r   r<   	is_systemHTTP_403_FORBIDDENupdater3   r4   r2   r5   )r.   r%   r   r   r
   s        r!   update_rolerE   @   s     =(((D \(AJZ[[[[~ 
1:[
 
 
 	
 BtG<<<D
KKK99>>~NNNKr#   )r$   c                 D   t          j        ||           }|st          t          j        d          |j        rt          t          j        d          t          j        ||            t          	                    |j
        |                               d           d S )Nr9   r:   r(   zCannot delete system roler,   zRole deleted)r   r;   r   r   r<   rB   r0   remover3   r4   r2   r5   r=   s       r!   delete_rolerH   S   s     =(((D \(AJZ[[[[~ 
3<W
 
 
 	
 RG$$$$
KKK99>>~NNN4r#   z/{role_id}/menusc                     t          j        ||           }|st          t          j        d          t          j        ||           }|S )Nr9   r:   r(   )r.   )r   r;   r   r   r<   	get_menus)r.   r   r   r
   menu_idss        r!   get_role_menusrL   e   sR     =(((D \(AJZ[[[["2w777HOr#   rK   c                     t          j        ||           }|st          t          j        d          |j        rt          t          j        d          t          j        || |           ddiS )Nr9   r:   r(   r@   )r.   rK   messagezRole menus updated successfully)r   r;   r   r   r<   rB   rC   update_menus)r.   rK   r   r   r
   s        r!   update_role_menusrP   r   s     =(((D \(AJZ[[[[~ 
1:[
 
 
 	
 2wBBBB899r#   z/customc                 `    t          j        || j        | j        |j        |j                  }|S )N)r   namedescription	tenant_idr+   )r   create_custom_rolerR   rS   rT   r2   )r%   r   r   r
   s       r!   rU   rU      s;     )\'(?  D Kr#   z/tenant/listc                 X    t          |           }|                    |j                  }|S N)r   get_tenant_rolesrT   )r   r   role_servicer    s       r!   list_tenant_rolesrZ      s*    
 r??L)),*@AAELr#   z/{role_id}/customc                 t    t          |          }|                    | |j        |j        |j                  }|S )N)r.   rT   rR   rS   )r   update_custom_rolerT   rR   rS   )r.   r%   r   r   rY   r
   s         r!   r\   r\      sD     r??L**(\'	 +  D Kr#   c                 Z    t          |          }|                    | |j                   d S rW   )r   delete_custom_rolerT   )r.   r   r   rY   s       r!   r^   r^      s-     r??L##G\-CDDD4r#   z/{role_id}/permissionspermissions_inc                    t          j        ||           }|st          t          j        d          |j        |j        k    rt          t          j        d          |j        rt          t          j        d          t          |          }|	                    | |j        d |j
        D                        t                              |j        |                               d	           d
diS )Nr9   r:   r(   z!No permission to modify this roler@   c                 *    g | ]}|j         |j        fS  resourceaction.0ps     r!   
<listcomp>z+assign_role_permissions.<locals>.<listcomp>   s!    PPPaj!(+PPPr#   )r.   rT   permissionsr,   zRole permissions assignedrN   z!Permissions assigned successfully)r   r;   r   r   r<   rT   rC   rB   r   assign_role_permissionsrj   r3   r4   r2   r5   )r.   r_   r   r   r
   permission_services         r!   rk   rk      s    =(((D \(AJZ[[[[~///1:]
 
 
 	
 ~ 
1:[
 
 
 	
 +2....(PP^5OPPP /   
 KKK99>>?Z[[[:;;r#   c                 *   t          j        ||           }|st          t          j        d          |j        |j        k    rt          t          j        d          t          |          }|                    | |j                  }d |D             S )Nr9   r:   r(   zNo permission to view this rolec                 0    g | ]}|d          |d         dS )r      rc   rb   rf   s     r!   ri   z(get_role_permissions.<locals>.<listcomp>   s(    DDD111..DDDr#   )	r   r;   r   r   r<   rT   rC   r   get_role_permissions)r.   r   r   r
   rl   rj   s         r!   rp   rp      s     =(((D \(AJZ[[[[~///1:[
 
 
 	
 +2..$99'<CYZZKDDDDDDr#   z/permissions/resourcesc                     t          d           }|                                }d |                                D             S )Nc                     g | ]
\  }}||d S ))rR   actionsrb   )rg   rR   rs   s      r!   ri   z+get_available_resources.<locals>.<listcomp>   s$    VVV=4Tg..VVVr#   )r   get_available_resourcesitems)r   rl   	resourcess      r!   rt   rt      s?    *400"::<<IVVIOODUDUVVVVr#   z/{role_id}/permissions/exportc                 Z    t                      }|                    || |j                  }|S rW   )r   export_role_permissionsrT   )r.   r   r   template_serviceconfigs        r!   export_permissionsr{      s/     12255b'<CYZZFMr#   z/{role_id}/permissions/importFrz   replacec                 b    t                      }|                    || |j        ||           ddiS )NrN   z!Permissions imported successfully)r   import_role_permissionsrT   )r.   rz   r|   r   r   ry   s         r!   import_permissionsr      s=     122,,R,:PRXZabbb:;;r#   z/{role_id}/permissions/copyfrom_role_idc                 `    t                      }|                    ||| |j                   ddiS )NrN   zPermissions copied successfully)r   copy_permissionsrT   )r.   r   r   r   ry   s        r!   r   r     s9     122%%b,AWXXX899r#   N)?fastapir   r   r   r   sqlalchemy.ormr   app.apir   app.api.permissionsr	   app.crud.roler
   r   app.models.userr   app.schemas.roler   r   r   r   r   r   &app.services.access.permission_servicer   /app.services.access.permission_template_servicer    app.services.access.role_servicer   common_loggingr   router__name__r3   r;   listget_db_without_tenantget_current_userintr"   postHTTP_201_CREATEDr7   r>   putrE   deleteHTTP_204_NO_CONTENTrH   rL   dictrP   rU   rZ   r\   r^   rk   rp   rt   r{   boolr   r   rb   r#   r!   <module>r      sU	   = = = = = = = = = = = = " " " " " "       6 6 6 6 6 6 + + + + + +                            E D D D D D U U U U U U 8 8 8 8 8 8 % % % % % %		H		 C\ 233'$455 !677	 
 	 	   43 S6;RSS '$455 !7!7!9!9::     TS L66 '$455 !677     76 L66 '$455 !7!7!9!9::	  	 	   76$ |)CDD '$455 !7!7!9!9::     ED" tCy99 '$455 !677	 			 	 	 	 :9	 t44 '$455 !7!7!9!9::	: ::3i: 	: 	: : : 54:" Y|AXYY '$455 !677     ZY N4+=>>'$455 !677    ?> == '$455 !677	  	 	   >=  "0JKK '$455 !677     LK %d;; '$455 !677	< <<)< 	< 	< < < <;<6 $T:P5QRR '$455 !677E EEE E E E SRE" $T,5GHH189N1O1O W W$ W W W IHW +,, '$455 !677     -, ,-- '$455 !677	< 	<	<	< 	< 			<
 	< 	< 	< .-	< *++ '$455 !677	: ::: 	: 	: : : ,+: : :r#   