
    Xj                        d dl mZ d dl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e          Zdeded	efd
Zded	efdZded	efdZded	efdZded	efdZded	efdZded	efdZd	efdZd	efdZd	efdZdS )    )Callable)DependsHTTPExceptionstatus)
get_logger)get_current_user)check_permission)Userresourceactionreturnc                 \     t          t                    fdt          dt          f fd}|S )Ncurrent_userr   c                   K   | j         }|s{ddlm}  || j        d          }d |D             }t	          d |D                       s=t
                              d| j                    t          t          j	        d          d}t          | j        |          }|sIt
                              d	| j         d
 d            t          t          j	        d d           | S )Nr   get_user_rolesc                     g | ]
}|d          S 	role_code .0roles     ;/lsinfo/ai/hellotax_ai/base_platform/app/api/permissions.py
<listcomp>zBrequire_permission.<locals>.permission_checker.<locals>.<listcomp>   s    CCC${+CCC    c              3      K   | ]}|d v V  	dS ))platform_adminplatform_userNr   r   codes     r   	<genexpr>zArequire_permission.<locals>.permission_checker.<locals>.<genexpr>   s(      ZZttBBZZZZZZr   z*Non-platform user without tenant_id: user=z(Non-platform users must have a tenant_idstatus_codedetail)user_id	tenant_idr   r   zPermission denied: user=z, resource=z	, action=zPermission denied: z on )r'   app.core.permissionsr   idanyloggerwarningr   r   HTTP_403_FORBIDDENcasbin_check_permission)r   r'   r   
user_roles
role_codeshas_permissionr   r   s         r   permission_checkerz.require_permission.<locals>.permission_checker   sC      *	 	;;;;;;';;JCC
CCCJZZzZZZZZ ]LO]]^^^# & 9E    I0 Oy8TZ
 
 
  	NNmlommRZmmekmmnnn"5CVCCCC    r   r   r   r
   )r   r   r2   s   `` r   require_permissionr4      sO    6=>N6O6O  t TX       2 r   c                 "    t          | d          S )Nreadr4   r   s    r   require_readr9   +   s    h///r   c                 "    t          | d          S )Ncreater7   r8   s    r   require_creater<   /       h111r   c                 "    t          | d          S Nupdater7   r8   s    r   require_updaterA   3   r=   r   c                 "    t          | d          S )Ndeleter7   r8   s    r   require_deleterD   7   r=   r   c                 "    t          | d          S )Nexecuter7   r8   s    r   require_executerG   ;   s    h	222r   c                 "    t          | d          S r?   r7   r8   s    r   require_writerI   ?   r=   r   c                  R    t          t                    fdt          dt          fd} | S )Nr   r   c                    K   ddl m} | j        pd} || j        |          }d |D             }t	          d |D                       st          t          j        d          | S )Nr   r   c                     g | ]
}|d          S r   r   r   s     r   r   z8require_admin.<locals>.admin_checker.<locals>.<listcomp>J       ???Dd;'???r   c              3      K   | ]}|d v V  	dS ))r   customer_adminNr   r    s     r   r"   z7require_admin.<locals>.admin_checker.<locals>.<genexpr>K   s(      WWD4??WWWWWWr   zAdmin access requiredr#   )r(   r   r'   r)   r*   r   r   r-   r   r   r'   r/   r0   s        r   admin_checkerz$require_admin.<locals>.admin_checkerE   s      777777 */a	#^LOY??
??J???
WWJWWWWW 	"5>U    r   r3   )rQ   s    r   require_adminrR   C   s=    189I1J1J 
 
$ 
t 
 
 
 
 r   c                  R    t          t                    fdt          dt          fd} | S )Nr   r   c                    K   ddl m} | j        pd} || j        |          }d |D             }d|vrt	          t
          j        d          | S )Nr   r   c                     g | ]
}|d          S r   r   r   s     r   r   zJrequire_platform_admin.<locals>.platform_admin_checker.<locals>.<listcomp>[   rM   r   r   zPlatform admin access requiredr#   r(   r   r'   r)   r   r   r-   rP   s        r   platform_admin_checkerz6require_platform_admin.<locals>.platform_admin_checkerV   s~      777777 */a	#^LOY??
??J???
:--"5>^    r   r3   )rW   s    r   require_platform_adminrX   T   s>    :ABR:S:S 
 
4 
X\ 
 
 
 
 "!r   c                  R    t          t                    fdt          dt          fd} | S )Nr   r   c                    K   ddl m} | j        pd} || j        |          }d |D             }d|vrt	          t
          j        d          | S )Nr   r   c                     g | ]
}|d          S r   r   r   s     r   r   zFrequire_tenant_admin.<locals>.tenant_admin_checker.<locals>.<listcomp>l   rM   r   rO   zTenant admin access requiredr#   rV   rP   s        r   tenant_admin_checkerz2require_tenant_admin.<locals>.tenant_admin_checkerg   s~      777777 */a	#^LOY??
??J???
:--"5>\    r   r3   )r\   s    r   require_tenant_adminr]   e   s>    8?@P8Q8Q 
 
 
VZ 
 
 
 
  r   N)collections.abcr   fastapir   r   r   common_loggingr   app.api.depsr   r(   r	   r.   app.models.userr
   __name__r+   strr4   r9   r<   rA   rD   rG   rI   rR   rX   r]   r   r   r   <module>re      s   $ $ $ $ $ $ 2 2 2 2 2 2 2 2 2 2 % % % % % % ) ) ) ) ) ) L L L L L L            	H		 c h    <03 08 0 0 0 02S 2X 2 2 2 22S 2X 2 2 2 22S 2X 2 2 2 23c 3h 3 3 3 32C 2H 2 2 2 2x    "" " " " "" h            r   