Ë
    ¸2Úi$  ã                   ój  — d Z ddlmZ ddlmZ dZ G d„ d«      Z G d„ de«      Z G d	„ d
e«      Z G d„ d«      Z	 G d„ d«      Z
 G d„ d«      Z G d„ dee«      Z G d„ de¬«      Z G d„ de«      Z G d„ de«      Z G d„ de«      Z G d„ de«      Z G d„ de«      Z G d „ d!e«      Z G d"„ d#e«      Zy$)%z2
Provides a set of pluggable permission policies.
é    )ÚHttp404)Ú
exceptions)ÚGETÚHEADÚOPTIONSc                   ó*   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zy)ÚOperationHolderMixinc                 ó$   — t        t        | |«      S ©N©ÚOperandHolderÚAND©ÚselfÚothers     úQ/var/www/html/acx/venv/lib/python3.12/site-packages/rest_framework/permissions.pyÚ__and__zOperationHolderMixin.__and__   s   € ÜœS $¨Ó.Ð.ó    c                 ó$   — t        t        | |«      S r   ©r   ÚORr   s     r   Ú__or__zOperationHolderMixin.__or__   s   € ÜœR  uÓ-Ð-r   c                 ó$   — t        t        || «      S r   r   r   s     r   Ú__rand__zOperationHolderMixin.__rand__   s   € ÜœS %¨Ó.Ð.r   c                 ó$   — t        t        || «      S r   r   r   s     r   Ú__ror__zOperationHolderMixin.__ror__   s   € ÜœR ¨Ó-Ð-r   c                 ó"   — t        t        | «      S r   )ÚSingleOperandHolderÚNOT)r   s    r   Ú
__invert__zOperationHolderMixin.__invert__   s   € Ü"¤3¨Ó-Ð-r   N)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r    © r   r   r	   r	      s   „ ò/ò.ò/ò.ó.r   r	   c                   ó   — e Zd Zd„ Zd„ Zy)r   c                 ó    — || _         || _        y r   )Úoperator_classÚ	op1_class)r   r'   r(   s      r   Ú__init__zSingleOperandHolder.__init__   s   € Ø,ˆÔØ"ˆ�r   c                 óH   —  | j                   |i |¤Ž}| j                  |«      S r   )r(   r'   )r   ÚargsÚkwargsÚop1s       r   Ú__call__zSingleOperandHolder.__call__!   s(   € Øˆd�n‰n˜dÐ- fÑ-ˆØ×"Ñ" 3Ó'Ð'r   N©r!   r"   r#   r)   r.   r$   r   r   r   r      s   „ ò#ó(r   r   c                   ó   — e Zd Zd„ Zd„ Zy)r   c                 ó.   — || _         || _        || _        y r   )r'   r(   Ú	op2_class)r   r'   r(   r2   s       r   r)   zOperandHolder.__init__'   s   € Ø,ˆÔØ"ˆŒØ"ˆ�r   c                 ón   —  | j                   |i |¤Ž} | j                  |i |¤Ž}| j                  ||«      S r   )r(   r2   r'   )r   r+   r,   r-   Úop2s        r   r.   zOperandHolder.__call__,   s?   € Øˆd�n‰n˜dÐ- fÑ-ˆØˆd�n‰n˜dÐ- fÑ-ˆØ×"Ñ" 3¨Ó,Ð,r   Nr/   r$   r   r   r   r   &   s   „ ò#ó
-r   r   c                   ó   — e Zd Zd„ Zd„ Zd„ Zy)r   c                 ó    — || _         || _        y r   ©r-   r4   ©r   r-   r4   s      r   r)   zAND.__init__3   ó   € ØˆŒØˆ�r   c                 óv   — | j                   j                  ||«      xr | j                  j                  ||«      S r   ©r-   Úhas_permissionr4   ©r   ÚrequestÚviews      r   r<   zAND.has_permission7   ó4   € à�H‰H×#Ñ# G¨TÓ2ò 3Ø�H‰H×#Ñ# G¨TÓ2ð	
r   c                 óz   — | j                   j                  |||«      xr | j                  j                  |||«      S r   )r-   Úhas_object_permissionr4   ©r   r>   r?   Úobjs       r   rB   zAND.has_object_permission=   s8   € à�H‰H×*Ñ*¨7°D¸#Ó>ò ?Ø�H‰H×*Ñ*¨7°D¸#Ó>ð	
r   N©r!   r"   r#   r)   r<   rB   r$   r   r   r   r   2   s   „ òò
ó
r   r   c                   ó   — e Zd Zd„ Zd„ Zd„ Zy)r   c                 ó    — || _         || _        y r   r7   r8   s      r   r)   zOR.__init__E   r9   r   c                 óv   — | j                   j                  ||«      xs | j                  j                  ||«      S r   r;   r=   s      r   r<   zOR.has_permissionI   r@   r   c                 óò   — | j                   j                  ||«      xr | j                   j                  |||«      xs; | j                  j                  ||«      xr | j                  j                  |||«      S r   )r-   r<   rB   r4   rC   s       r   rB   zOR.has_object_permissionO   sn   € à�H‰H×#Ñ# G¨TÓ2ò CØ—‘×.Ñ.¨w¸¸cÓBò
ð �H‰H×#Ñ# G¨TÓ2ò CØ—‘×.Ñ.¨w¸¸cÓBð	
r   NrE   r$   r   r   r   r   D   s   „ òò
ó
r   r   c                   ó   — e Zd Zd„ Zd„ Zd„ Zy)r   c                 ó   — || _         y r   )r-   )r   r-   s     r   r)   zNOT.__init__Z   s	   € Øˆ�r   c                 ó<   — | j                   j                  ||«       S r   )r-   r<   r=   s      r   r<   zNOT.has_permission]   s   € Ø—8‘8×*Ñ*¨7°DÓ9Ð9Ð9r   c                 ó>   — | j                   j                  |||«       S r   )r-   rB   rC   s       r   rB   zNOT.has_object_permission`   s   € Ø—8‘8×1Ñ1°'¸4ÀÓEÐEÐEr   NrE   r$   r   r   r   r   Y   s   „ òò:óFr   r   c                   ó   — e Zd Zy)ÚBasePermissionMetaclassN)r!   r"   r#   r$   r   r   rO   rO   d   s   „ Ør   rO   c                   ó   — e Zd ZdZd„ Zd„ Zy)ÚBasePermissionzH
    A base class from which all permission classes should inherit.
    c                  ó   — y©zL
        Return `True` if permission is granted, `False` otherwise.
        Tr$   r=   s      r   r<   zBasePermission.has_permissionm   ó   € ð r   c                  ó   — yrS   r$   rC   s       r   rB   z$BasePermission.has_object_permissions   rT   r   N)r!   r"   r#   Ú__doc__r<   rB   r$   r   r   rQ   rQ   h   s   „ ñòór   rQ   )Ú	metaclassc                   ó   — e Zd ZdZd„ Zy)ÚAllowAnyz¹
    Allow any access.
    This isn't strictly required, since you could use an empty
    permission_classes list, but it's useful because it makes the intention
    more explicit.
    c                  ó   — y)NTr$   r=   s      r   r<   zAllowAny.has_permission‚   s   € Ør   N©r!   r"   r#   rV   r<   r$   r   r   rY   rY   z   s   „ ñór   rY   c                   ó   — e Zd ZdZd„ Zy)ÚIsAuthenticatedz4
    Allows access only to authenticated users.
    c                 ó\   — t        |j                  xr |j                  j                  «      S r   )ÚboolÚuserÚis_authenticatedr=   s      r   r<   zIsAuthenticated.has_permission‹   s    € Ü�G—L‘LÒB W§\¡\×%BÑ%BÓCÐCr   Nr[   r$   r   r   r]   r]   †   s   „ ñóDr   r]   c                   ó   — e Zd ZdZd„ Zy)ÚIsAdminUserz,
    Allows access only to admin users.
    c                 ó\   — t        |j                  xr |j                  j                  «      S r   )r_   r`   Úis_staffr=   s      r   r<   zIsAdminUser.has_permission”   s    € Ü�G—L‘LÒ: W§\¡\×%:Ñ%:Ó;Ð;r   Nr[   r$   r   r   rc   rc   �   s   „ ñó<r   rc   c                   ó   — e Zd ZdZd„ Zy)ÚIsAuthenticatedOrReadOnlyzL
    The request is authenticated as a user, or is a read-only request.
    c                 ó„   — t        |j                  t        v xs$ |j                  xr |j                  j                  «      S r   )r_   ÚmethodÚSAFE_METHODSr`   ra   r=   s      r   r<   z(IsAuthenticatedOrReadOnly.has_permission�   s9   € ÜØ�N‰NœlÐ*ò *Ø�L‰Lò *Ø�L‰L×)Ñ)ó
ð 	
r   Nr[   r$   r   r   rg   rg   ˜   s   „ ñó
r   rg   c                   óB   — e Zd ZdZg g g dgdgdgdgdœZdZd„ Zd„ Zd	„ Zy
)ÚDjangoModelPermissionsa}  
    The request is authenticated using `django.contrib.auth` permissions.
    See: https://docs.djangoproject.com/en/dev/topics/auth/#permissions

    It ensures that the user is authenticated, and has the appropriate
    `add`/`change`/`delete` permissions on the model.

    This permission can only be applied against view classes that
    provide a `.queryset` attribute.
    ú %(app_label)s.add_%(model_name)sú#%(app_label)s.change_%(model_name)sú#%(app_label)s.delete_%(model_name)s©r   r   r   ÚPOSTÚPUTÚPATCHÚDELETETc                 óì   — |j                   j                  |j                   j                  dœ}|| j                  vrt	        j
                  |«      ‚| j                  |   D �cg c]  }||z  ‘Œ	 c}S c c}w )z‚
        Given a model and an HTTP method, return the list of permission
        codes that the user is required to have.
        ©Ú	app_labelÚ
model_name©Ú_metarw   rx   Ú	perms_mapr   ÚMethodNotAllowed©r   ri   Ú	model_clsr,   Úperms        r   Úget_required_permissionsz/DjangoModelPermissions.get_required_permissionsÀ   se   € ð #Ÿ™×2Ñ2Ø#Ÿ/™/×4Ñ4ñ
ˆð
 ˜Ÿ™Ñ'Ü×-Ñ-¨fÓ5Ð5à*.¯.©.¸Ñ*@ÖA $��v“ÒAÐAùÒAó   Á"A1c                 ó4  — t        |d«      s7t        |dd «      €*J dj                  | j                  j                  «      «       ‚t        |d«      r>|j                  «       }|€*J dj                  |j                  j                  «      «       ‚|S |j                  S )NÚget_querysetÚquerysetz[Cannot apply {} on a view that does not set `.queryset` or have a `.get_queryset()` method.z{}.get_queryset() returned None)ÚhasattrÚgetattrÚformatÚ	__class__r!   rƒ   r„   )r   r?   r„   s      r   Ú	_querysetz DjangoModelPermissions._querysetÏ   s™   € Ü�t˜^Ô,Ü�t˜Z¨Ó.Ð:ð	*ð>ç
‰&�—‘×(Ñ(Ó
)ó		*ð ;ô �4˜Ô(Ø×(Ñ(Ó*ˆHØÐ'ð Ø1×8Ñ8¸¿¹×9PÑ9PÓQóÐ'ð ˆOØ�}‰}Ðr   c                 ó   — t        |dd«      ry|j                  r"|j                  j                  s| j                  ry| j	                  |«      }| j                  |j                  |j                  «      }|j                  j                  |«      S )NÚ_ignore_model_permissionsFT)	r†   r`   ra   Úauthenticated_users_onlyr‰   r€   ri   ÚmodelÚ	has_perms)r   r>   r?   r„   Úpermss        r   r<   z%DjangoModelPermissions.has_permissionÞ   sp   € ô �4Ð4°eÔ<Øà�|Š|Ø�|‰|×,Ò,°×1NÒ1NØà—>‘> $Ó'ˆØ×-Ñ-¨g¯n©n¸h¿n¹nÓMˆà�|‰|×%Ñ% eÓ,Ð,r   N)	r!   r"   r#   rV   r{   rŒ   r€   r‰   r<   r$   r   r   rl   rl   ¥   sI   „ ñ	ð ØØØ3Ð4Ø5Ð6Ø7Ð8Ø8Ð9ñ€Ið  $ÐòBòó-r   rl   c                   ó   — e Zd ZdZdZy)Ú$DjangoModelPermissionsOrAnonReadOnlyzj
    Similar to DjangoModelPermissions, except that anonymous users are
    allowed read-only access.
    FN)r!   r"   r#   rV   rŒ   r$   r   r   r‘   r‘   î   s   „ ñð  %Ñr   r‘   c                   ó8   — e Zd ZdZg g g dgdgdgdgdœZd„ Zd„ Zy)	ÚDjangoObjectPermissionsa—  
    The request is authenticated using Django's object-level permissions.
    It requires an object-permissions-enabled backend, such as Django Guardian.

    It ensures that the user is authenticated, and has the appropriate
    `add`/`change`/`delete` permissions on the object using .has_perms.

    This permission can only be applied against view classes that
    provide a `.queryset` attribute.
    rm   rn   ro   rp   c                 óì   — |j                   j                  |j                   j                  dœ}|| j                  vrt	        j
                  |«      ‚| j                  |   D �cg c]  }||z  ‘Œ	 c}S c c}w )Nrv   ry   r}   s        r   Úget_required_object_permissionsz7DjangoObjectPermissions.get_required_object_permissions  sc   € à"Ÿ™×2Ñ2Ø#Ÿ/™/×4Ñ4ñ
ˆð
 ˜Ÿ™Ñ'Ü×-Ñ-¨fÓ5Ð5à*.¯.©.¸Ñ*@ÖA $��v“ÒAÐAùÒAr�   c                 ó8  — | j                  |«      }|j                  }|j                  }| j                  |j                  |«      }|j                  ||«      sC|j                  t        v rt        ‚| j                  d|«      }|j                  ||«      st        ‚yy)Nr   FT)r‰   r�   r`   r•   ri   rŽ   rj   r   )	r   r>   r?   rD   r„   r~   r`   r�   Ú
read_permss	            r   rB   z-DjangoObjectPermissions.has_object_permission  sˆ   € à—>‘> $Ó'ˆØ—N‘Nˆ	Ø�|‰|ˆà×4Ñ4°W·^±^ÀYÓOˆà�~‰~˜e SÔ)ð
 �~‰~¤Ñ-ô �à×=Ñ=¸eÀYÓOˆJØ—>‘> *¨cÔ2Ü�ð àr   N)r!   r"   r#   rV   r{   r•   rB   r$   r   r   r“   r“   ö   s<   „ ñ	ð ØØØ3Ð4Ø5Ð6Ø7Ð8Ø8Ð9ñ€Iò	Bór   r“   N)rV   Údjango.httpr   Úrest_frameworkr   rj   r	   r   r   r   r   r   ÚtyperO   rQ   rY   r]   rc   rg   rl   r‘   r“   r$   r   r   ú<module>r›      sÒ   ðñõ  å %à)€÷.ñ .ô"(Ð.ô (ô	-Ð(ô 	-÷
ñ 
÷$
ñ 
÷*Fñ Fô	Ð2°Dô 	ôÐ6õ ô$	ˆ~ô 	ôD�nô Dô<�.ô <ô

 ô 

ôF-˜^ô F-ôR%Ð+Aô %ô9Ð4õ 9r   