o
    "i
                     @   sL   d Z ddlmZ ddlmZ ddlmZ ddlmZ G dd dZ	e	 Z
dS )	z
UserRole CRUD operations
    )List)Session)UserRole)Rolec                
   @   s   e Zd ZdZdededee fddZdededee dedd	f
d
dZ	dededede
fddZdedededd	fddZd	S )CRUDUserRolezCRUD operations for UserRoledbuser_idreturnc                C   s\   | ttj|ktjdk }dd |D }|sg S | ttj|tjdk S )zGet all roles for a userFc                 S   s   g | ]}|j qS  )role_id).0urr
   r
   :/lsinfo/ai/hellotax_ai/base_platform/app/crud/user_role.py
<listcomp>   s    z/CRUDUserRole.get_user_roles.<locals>.<listcomp>)	queryr   filterr   
is_deletedallr   idin_)selfr   r   
user_rolesrole_idsr
   r
   r   get_user_roles   s   


zCRUDUserRole.get_user_rolesr   	tenant_idNc                C   s   ddl m}m}m} | j||d}|ttj|ktj	dk
 }	|	D ]}
d|
_	q$|D ]}t||d}|| q,|  |D ]}||d|j | q@|ttj|
 }|D ]}||d|j | q]||| dS )	z,Update roles for a user and sync with Casbinr   )add_role_for_userinvalidate_user_permissionsremove_role_for_user)r   FTr   r   zrole:N)app.core.permissionsr   r   r   r   r   r   r   r   r   r   addcommitcoder   r   r   )r   r   r   r   r   r   r   r   	old_rolesexistingr   r   	user_roleold_role	new_rolesroler
   r
   r   update_user_roles   s(   
zCRUDUserRole.update_user_rolesr   c                C   s,   t ||d}|| |  || |S )zAdd a role to a userr   )r   r    r!   refreshr   r   r   r   r%   r
   r
   r   add_user_roleB   s
   

zCRUDUserRole.add_user_rolec                C   sD   | ttj|ktj|ktjdk }|r d|_|  dS dS )z'Remove a role from a user (soft delete)FTN)r   r   r   r   r   r   firstr!   r+   r
   r
   r   remove_user_roleJ   s   
zCRUDUserRole.remove_user_role)__name__
__module____qualname____doc__r   intr   r   r   r)   r   r,   r.   r
   r
   r
   r   r   
   s    "%r   N)r2   typingr   sqlalchemy.ormr   app.models.user_roler   app.models.roler   r   r%   r
   r
   r
   r   <module>   s    
M