§
    öÆin  ã            
       óž  — d Z ddlmZ ddlmZmZm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mZ dd	lmZmZ dd
lmZ  edg¬¦  «        Z ed¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Zdededee         fd„Ze                      de¬¦  «         ee¦  «         ee¦  «        fdedefd„¦   «         Z!e "                    de¬¦  «         ee¦  «         ee¦  «        fdedededefd„¦   «         Z#e                      dee         ¬¦  «         ee¦  «         ee¦  «        fded efd!„¦   «         Z$d"S )#u  
Permission endpoints:
  GET  /permissions              â†’ all users + their module access matrix (admin only)
  PUT  /permissions/{user_id}    â†’ set modules list for a user (admin only)
  GET  /me/permissions           â†’ current user's accessible modules (any authenticated user)
é    )ÚList)Ú	APIRouterÚDependsÚHTTPException)ÚAsyncSession)ÚselectÚdelete)Úget_db)ÚUser)ÚUserPermissionÚALL_MODULES)Úget_current_userÚrequire_role)Ú	BaseModelÚpermissions)ÚtagsÚadminc                   óD   — e Zd ZU eed<   eed<   eed<   ee         ed<   dS )ÚUserPermissionRowÚuser_idÚusernameÚroleÚmodulesN)Ú__name__Ú
__module__Ú__qualname__ÚintÚ__annotations__Ústrr   © ó    ú?/var/www/html/jarvis.com/web/backend/app/routers/permissions.pyr   r      s=   € € € € € € Ø€L€L�LØ€M€M�MØ
€I€I�IØ�#ŒYÐÐÑÐÐr!   r   c                   ó<   — e Zd ZU ee         ed<   ee         ed<   dS )ÚPermissionMatrixÚusersÚall_modulesN)r   r   r   r   r   r   r   r    r!   r"   r$   r$      s4   € € € € € € ØÐ!Ô"Ð"Ð"Ñ"Ø�c”ÐÐÑÐÐr!   r$   c                   ó&   — e Zd ZU ee         ed<   dS )ÚSetPermissionsBodyr   N)r   r   r   r   r   r   r    r!   r"   r(   r(   "   s"   € € € € € € Ø�#ŒYÐÐÑÐÐr!   r(   r   ÚdbÚreturnc              ƒ   ó  K  — |                      t          t          j        ¦  «                             t          j        | k    t          j        dk    ¦  «        ¦  «        ƒ d {V —†}|                     ¦   «                              ¦   «         S )NT)	Úexecuter   r   ÚmoduleÚwherer   Ú
can_accessÚscalarsÚall)r   r)   Úresults      r"   Ú_get_user_modulesr3   (   s‚   è è € Ø—:’:Ý�~Ô$Ñ%Ô%ß	Š�~Ô%¨Ò0µ.Ô2KÈtÒ2SÑ	TÔ	Tñô ð ð ð ð ð ð €Fð �>Š>ÑÔ×ÒÑ!Ô!Ð!r!   z/permissions)Úresponse_modelÚ_c           	   ƒ   ó8  K  — |                       t          t          ¦  «                             t          j        dk    ¦  «                             t          j        ¦  «        ¦  «        ƒ d {V —†}|                     ¦   «                              ¦   «         }g }|D ]m}|j	        dk    rt          d d …         }nt          |j        | ¦  «        ƒ d {V —†}|                     t          |j        |j        |j	        |¬¦  «        ¦  «         Œnt          |t          ¬¦  «        S )NTr   ©r   r   r   r   )r%   r&   )r,   r   r   r.   Ú	is_activeÚorder_byÚidr0   r1   r   r   r3   Úappendr   r   r$   )r)   r5   Úusers_resultr%   ÚrowsÚur   s          r"   Úget_permission_matrixr?   2   s  è è € ð
 Ÿš¥F­4¡L¤L×$6Ò$6µt´~ÈÒ7MÑ$NÔ$N×$WÒ$WÕX\ÔX_Ñ$`Ô$`ÑaÔaÐaÐaÐaÐaÐaÐa€LØ× Ò Ñ"Ô"×&Ò&Ñ(Ô(€Eà€DØð hð hˆØŒ6�WÒÐå! ! ! !”nˆGˆGå-¨a¬d°BÑ7Ô7Ð7Ð7Ð7Ð7Ð7Ð7ˆGØ�ŠÕ%¨a¬d¸Q¼ZÈaÌfÐ^eÐfÑfÔfÑgÔgÐgÐgå $µKÐ@Ñ@Ô@Ð@r!   z/permissions/{user_id}Úbodyc           	   ƒ   ó   K  — |                      t          t          ¦  «                             t          j        | k    ¦  «        ¦  «        ƒ d {V —†}|                     ¦   «         }|st          dd¬¦  «        ‚|j        dk    rt          dd¬¦  «        ‚d„ |j        D ¦   «         }|rt          dd	|› �¬¦  «        ‚|                      t          t          ¦  «                             t          j        | k    ¦  «        ¦  «        ƒ d {V —† t          D ].}|                     t          | |||j        v ¬
¦  «        ¦  «         Œ/|                     ¦   «         ƒ d {V —† t          |j        |j        |j        |j        ¬¦  «        S )Ni”  zUser not found)Ústatus_codeÚdetailr   i�  z!Cannot restrict admin permissionsc                 ó$   — g | ]}|t           v¯|‘ŒS r    )r   )Ú.0Úms     r"   ú
<listcomp>z(set_user_permissions.<locals>.<listcomp>U   s"   € Ð?Ð?Ð?�Q¨!µ;Ð*>Ð*>ˆqÐ*>Ð*>Ð*>r!   i¦  zUnknown modules: )r   r-   r/   r7   )r,   r   r   r.   r:   Úscalar_one_or_noner   r   r   r	   r   r   r   ÚaddÚcommitr   r   )r   r@   r)   r5   r2   ÚuserÚinvalidr-   s           r"   Úset_user_permissionsrM   F   s¤  è è € ð —:’:�f¥T™lœl×0Ò0µ´¸GÒ1CÑDÔDÑEÔEÐEÐEÐEÐEÐEÐE€FØ×$Ò$Ñ&Ô&€DØð FÝ¨Ð4DÐEÑEÔEÐEØ„y�GÒÐÝ¨Ð4WÐXÑXÔXÐXð @Ð?˜$œ,Ð?Ñ?Ô?€GØð SÝ¨Ð4QÈÐ4QÐ4QÐRÑRÔRÐRð �*Š*•V�NÑ+Ô+×1Ò1µ.Ô2HÈGÒ2SÑTÔTÑ
UÔ
UÐUÐUÐUÐUÐUÐUÐUÝð ð ˆØ
�Š�~ØØØ ¤Ð-ð
ñ 
ô 
ñ 	ô 	ð 	ð 	ð
 �)Š)‰+Œ+ÐÐÐÐÐÐÐå T¤W°t´}È4Ì9Ð^bÔ^jÐkÑkÔkÐkr!   z/me/permissionsÚcurrent_userc              ƒ   ó€   K  — |j         dk    rt          dd…         S t          |j        | ¦  «        ƒ d{V —†}|sddgS |S )z9Returns list of module names the current user can access.r   NÚtasksÚletters)r   r   r3   r:   )r)   rN   r   s      r"   Úget_my_permissionsrR   f   s_   è è € ð Ô˜GÒ#Ð#Ý˜1˜1˜1Œ~Ðå% l¤o°rÑ:Ô:Ð:Ð:Ð:Ð:Ð:Ð:€Gàð $Ø˜Ð#Ð#Ø€Nr!   N)%Ú__doc__Útypingr   Úfastapir   r   r   Úsqlalchemy.ext.asyncior   Ú
sqlalchemyr   r	   Úapp.databaser
   Úapp.models.userr   Úapp.models.user_permissionr   r   Úapp.depsr   r   Úpydanticr   ÚrouterÚ
admin_onlyr   r$   r(   r   r   r3   Úgetr?   ÚputrM   rR   r    r!   r"   ú<module>ra      só  ððð ð Ð Ð Ð Ð Ð Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø /Ð /Ð /Ð /Ð /Ð /Ø %Ð %Ð %Ð %Ð %Ð %Ð %Ð %à Ð Ð Ð Ð Ð Ø  Ð  Ð  Ð  Ð  Ð  Ø BÐ BÐ BÐ BÐ BÐ BÐ BÐ BØ 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ø Ð Ð Ð Ð Ð à	ˆ˜˜Ð	(Ñ	(Ô	(€Øˆ\˜'Ñ"Ô"€
ð
ð ð ð ð ˜	ñ ô ð ðð ð ð ð �yñ ô ð ðð ð ð ð ˜ñ ô ð ð" Sð "¨lð "¸tÀC¼yð "ð "ð "ð "ð ‡‚ˆNÐ+;€Ñ<Ô<à�w˜v‘”Øˆg�jÑ!Ô!ðAð AØðAàðAð Að Añ =Ô<ðAð& ‡‚Ð$Ð5F€ÑGÔGð �w˜v‘”Øˆg�jÑ!Ô!ð	lð lØðlà
ðlð 	ðlð ð	lð lð lñ HÔGðlð> ‡‚Ð¨d°3¬i€Ñ8Ô8à�w˜v‘”Ø ˜Ð!1Ñ2Ô2ðð Øðàðð ð ñ 9Ô8ðð ð r!   