Ë
    ¸2Úi‘  ã                   ó¶   — 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 d dlmZ d dlZ G d	„ d
ej                  «      Z G d„ de«      Z G d„ de«      Zy)é    )ÚFieldDoesNotExist)Úmodels)ÚQ)ÚObjectPermissionChecker)Úget_content_type)ÚObjectNotPersisted)Ú
PermissionNc                   óF   — e Zd Zed„ «       Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d„ Zy	)
ÚBaseObjectPermissionManagerc                 ón   — 	 | j                   j                  j                  d«       y# t        $ r Y yw xY w)NÚuserÚgroup©ÚmodelÚ_metaÚ	get_fieldr   ©Úselfs    úH/var/www/html/acx/venv/lib/python3.12/site-packages/guardian/managers.pyÚuser_or_group_fieldz/BaseObjectPermissionManager.user_or_group_field   s4   € ð	Ø�J‰J×Ñ×&Ñ& vÔ.ØøÜ ò 	Ùð	úó   ‚%( ¨	4³4c                 ón   — 	 | j                   j                  j                  d«       y# t        $ r Y yw xY w)NÚ	object_pkTFr   r   s    r   Ú
is_genericz&BaseObjectPermissionManager.is_generic   s4   € ð	Ø�J‰J×Ñ×&Ñ& {Ô3ØøÜ ò 	Ùð	úr   c                 óX  — t        |dd«      €t        d|z  «      ‚t        |«      }t        |t        «      s"t        j
                  j                  ||¬«      }n|}d|| j                  |i}| j                  «       r||d<   |j                  |d<   n||d<    | j                  d	i |¤Ž\  }}|S )
zf
        Assigns permission with given ``perm`` for an instance ``obj`` and
        ``user``.
        ÚpkNú%Object %s needs to be persisted first©Úcontent_typeÚcodenameÚ
permissionr   r   Úcontent_object© )Úgetattrr   r   Ú
isinstancer	   ÚobjectsÚgetr   r   r   Úget_or_create)	r   ÚpermÚuser_or_groupÚobjÚctyper!   ÚkwargsÚobj_permÚ_s	            r   Úassign_permz'BaseObjectPermissionManager.assign_perm   s¾   € ô
 �3˜˜dÓ#Ð+Ü$Ð%LØ'*ñ&+ó ,ð ,ä  Ó%ˆÜ˜$¤
Ô+Ü#×+Ñ+×/Ñ/¸UÈTÐ/ÓR‰JàˆJà 
¨D×,DÑ,DÀmÐTˆØ�?‰?ÔØ%*ˆF�>Ñ"Ø"%§&¡&ˆF�;Òà'*ˆFÐ#Ñ$Ø(�d×(Ñ(Ñ2¨6Ñ2‰ˆ�!Øˆó    c                 óZ  — t        |t        «      rt        |d   «      }nt        |j                  «      }t        |t        «      s"t        j
                  j                  ||¬«      }n|}t        |«      }|j                  |«       g }|D ]z  }|j                  |j                  |«      rŒ d|| j                  |i}	| j                  «       r||	d<   |j                  |	d<   n||	d<   |j                   | j                  di |	¤Ž«       Œ| | j                  j
                  j                  |«       |S )z|
        Bulk assigns permissions with given ``perm`` for an objects in ``queryset`` and
        ``user_or_group``.
        r   r   r!   r   r   r"   r#   )r%   Úlistr   r   r	   r&   r'   r   Úprefetch_permsÚhas_permr    r   r   r   ÚappendÚbulk_create)
r   r)   r*   Úquerysetr,   r!   ÚcheckerÚassigned_permsÚinstancer-   s
             r   Úbulk_assign_permz,BaseObjectPermissionManager.bulk_assign_perm4   s  € ô
 �h¤Ô%Ü$ X¨a¡[Ó1‰Eä$ X§^¡^Ó4ˆEä˜$¤
Ô+Ü#×+Ñ+×/Ñ/¸UÈTÐ/ÓR‰JàˆJä)¨-Ó8ˆØ×Ñ˜xÔ(àˆØ ò 	<ˆHØ×#Ñ# J×$7Ñ$7¸ÕBØ&¨
°D×4LÑ4LÈmÐ\�Ø—?‘?Ô$Ø-2�F˜>Ñ*Ø*2¯+©+�F˜;Ò'à/7�FÐ+Ñ,Ø×%Ñ% j d§j¡jÑ&:°6Ñ&:Õ;ð	<ð 	�
‰
×Ñ×&Ñ& ~Ô6àÐr1   c                 óœ  — t        |«      }t        |t        «      s"t        j                  j	                  ||¬«      }n|}d|i}| j                  «       r||d<   |j                  |d<   n||d<   g }| j                  }|D ](  }	|	||<   |j                   | j                  di |¤Ž«       Œ* | j                  j                  j                  |«      S )zj
        Bulk assigns given ``perm`` for the object ``obj`` to a set of users or a set of groups.
        r   r!   r   r   r"   r#   )r   r%   r	   r&   r'   r   r   r   r6   r   r7   )
r   r)   Úusers_or_groupsr+   r,   r!   r-   Úto_addÚfieldr   s
             r   Úassign_perm_to_manyz/BaseObjectPermissionManager.assign_perm_to_manyT   sØ   € ô ! Ó%ˆÜ˜$¤
Ô+Ü#×+Ñ+×/Ñ/¸UØ9=ð 0ó ?‰Jð ˆJà 
Ð+ˆØ�?‰?ÔØ%*ˆF�>Ñ"Ø"%§&¡&ˆF�;Òà'*ˆFÐ#Ñ$àˆØ×(Ñ(ˆØ#ò 	ˆDØ ˆF�5‰MØ�M‰MØ�—
‘
Ñ$˜VÑ$õð	ð �z‰z×!Ñ!×-Ñ-¨fÓ5Ð5r1   c                 ó\   — t        j                  dt        «       | j                  |||«      S )z4 Depreciated function name left in for compatibilityz›UserObjectPermissionManager method 'assign' is being renamed to 'assign_perm'. Update your code accordingly as old name will be depreciated in 2.0 version.)ÚwarningsÚwarnÚDeprecationWarningr0   )r   r)   r*   r+   s       r   Úassignz"BaseObjectPermissionManager.assignp   s1   € ä�‰ð  tô  vHô  	IØ×Ñ  m°SÓ9Ð9r1   c                 óœ  — t        |dd«      €t        d|z  «      ‚t        di | j                  |i¤Ž}t	        |t
        «      r|t        |¬«      z  }n|t        |t        |«      ¬«      z  }| j                  «       r|t        |j                  ¬«      z  }n|t        |j                  ¬«      z  }| j                  |«      j                  «       S )	a>  
        Removes permission ``perm`` for an instance ``obj`` and given ``user_or_group``.

        Please note that we do NOT fetch object permission from database - we
        use ``Queryset.delete`` method for removing it. Main implication of this
        is that ``post_delete`` signals would NOT be fired.
        r   Nr   ©r!   ©Úpermission__codenameÚpermission__content_type)r   )Úcontent_object__pkr#   )r$   r   r   r   r%   r	   r   r   r   ÚfilterÚdelete)r   r)   r*   r+   Úfilterss        r   Úremove_permz'BaseObjectPermissionManager.remove_permu   sÅ   € ô �3˜˜dÓ#Ð+Ü$Ð%LØ'*ñ&+ó ,ð ,ô Ñ@�t×/Ñ/°Ð?Ñ@ˆä�dœJÔ'Ø”q DÔ)Ñ)‰Gà”q¨dÜ2BÀ3Ó2GôIñ IˆGð �?‰?ÔØ”q 3§6¡6Ô*Ñ*‰Gà”q¨C¯F©FÔ3Ñ3ˆGØ�{‰{˜7Ó#×*Ñ*Ó,Ð,r1   c           	      ó°  — t        di | j                  |i¤Ž}t        |t        «      r|t        |¬«      z  }n%t	        |j
                  «      }|t        ||¬«      z  }| j                  «       r8|t        |j                  dd¬«      D �cg c]  }t        |«      ‘Œ c}¬«      z  }n|t        |¬«      z  }| j                  |«      j                  «       S c c}w )	a9  
        Removes permission ``perm`` for a ``queryset`` and given ``user_or_group``.

        Please note that we do NOT fetch object permission from database - we
        use ``Queryset.delete`` method for removing it. Main implication of this
        is that ``post_delete`` signals would NOT be fired.
        rH   rI   r   T)Úflat)Úobject_pk__in)Úcontent_object__inr#   )r   r   r%   r	   r   r   r   Úvalues_listÚstrrM   rN   )r   r)   r*   r8   rO   r,   r   s          r   Úbulk_remove_permz,BaseObjectPermissionManager.bulk_remove_perm�   sÁ   € ô Ñ@�t×/Ñ/°Ð?Ñ@ˆä�dœJÔ'Ø”q DÔ)Ñ)‰Gä$ X§^¡^Ó4ˆEØ”q¨dØ27ô9ñ 9ˆGð �?‰?ÔØ”q¸(×:NÑ:NÈtÐZ^Ð:NÓ:_Ö'`°B¬¨B­Ò'`ÔaÑa‰Gà”q¨HÔ5Ñ5ˆGà�{‰{˜7Ó#×*Ñ*Ó,Ð,ùò	 (as   ÂC
N)Ú__name__Ú
__module__Ú__qualname__Úpropertyr   r   r0   r<   rA   rF   rP   rW   r#   r1   r   r   r      s8   „ àñó ðòòò.ò@6ò8:ò
-ó4-r1   r   c                   ó   — e Zd Zy)ÚUserObjectPermissionManagerN©rX   rY   rZ   r#   r1   r   r]   r]   ¨   ó   „ Ør1   r]   c                   ó   — e Zd Zy)ÚGroupObjectPermissionManagerNr^   r#   r1   r   ra   ra   ¬   r_   r1   ra   )Údjango.core.exceptionsr   Ú	django.dbr   Údjango.db.modelsr   Úguardian.corer   Úguardian.ctypesr   Úguardian.exceptionsr   Údjango.contrib.auth.modelsr	   rC   ÚManagerr   r]   ra   r#   r1   r   ú<module>rj      sJ   ðÝ 4Ý Ý Ý 1Ý ,Ý 2Ý 1ã ôY- &§.¡.ô Y-ôx	Ð"=ô 	ô	Ð#>õ 	r1   