Ë
    ô%9j*&  ã                   ó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     úV/var/www/html/truck-me/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d„ Zy)r   c                 ó.   — || _         || _        || _        y r   )r'   r(   Ú	op2_class)r   r'   r(   r1   s       r   r)   zOperandHolder.__init__'   s   € Ø,ˆÔØ"ˆŒØ"ˆ�r   c                 ón   —  | j                   |i |¤Ž} | j                  |i |¤Ž}| j                  ||«      S r   )r(   r1   r'   )r   r+   r,   r-   Úop2s        r   r.   zOperandHolder.__call__,   s?   € Øˆd�n‰n˜dÐ- fÑ-ˆØˆd�n‰n˜dÐ- fÑ-ˆØ×"Ñ" 3¨Ó,Ð,r   c                 óÄ   — t        |t        «      xrO | j                  |j                  k(  xr4 | j                  |j                  k(  xr | j                  |j                  k(  S r   )Ú
isinstancer   r'   r(   r1   r   s     r   Ú__eq__zOperandHolder.__eq__1   sV   € ä�uœmÓ,ò .Ø×Ñ 5×#7Ñ#7Ñ7ò.à�N‰N˜eŸo™oÑ-ò.ð �N‰N˜eŸo™oÑ-ð		
r   N)r!   r"   r#   r)   r.   r6   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-   r3   ©r   r-   r3   s      r   r)   zAND.__init__;   ó   € ØˆŒØˆ�r   c                 óv   — | j                   j                  ||«      xr | j                  j                  ||«      S r   ©r-   Úhas_permissionr3   ©r   ÚrequestÚviews      r   r>   zAND.has_permission?   ó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_permissionr3   ©r   r@   rA   Úobjs       r   rD   zAND.has_object_permissionE   s8   € à�H‰H×*Ñ*¨7°D¸#Ó>ò ?Ø�H‰H×*Ñ*¨7°D¸#Ó>ð	
r   N©r!   r"   r#   r)   r>   rD   r$   r   r   r   r   :   s   „ òò
ó
r   r   c                   ó   — e Zd Zd„ Zd„ Zd„ Zy)r   c                 ó    — || _         || _        y r   r9   r:   s      r   r)   zOR.__init__M   r;   r   c                 óv   — | j                   j                  ||«      xs | j                  j                  ||«      S r   r=   r?   s      r   r>   zOR.has_permissionQ   rB   r   c                 óò   — | j                   j                  ||«      xr | j                   j                  |||«      xs; | j                  j                  ||«      xr | j                  j                  |||«      S r   )r-   r>   rD   r3   rE   s       r   rD   zOR.has_object_permissionW   sn   € à�H‰H×#Ñ# G¨TÓ2ò CØ—‘×.Ñ.¨w¸¸cÓBò
ð �H‰H×#Ñ# G¨TÓ2ò CØ—‘×.Ñ.¨w¸¸cÓBð	
r   NrG   r$   r   r   r   r   L   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__b   s	   € Øˆ�r   c                 ó<   — | j                   j                  ||«       S r   )r-   r>   r?   s      r   r>   zNOT.has_permissione   s   € Ø—8‘8×*Ñ*¨7°DÓ9Ð9Ð9r   c                 ó>   — | j                   j                  |||«       S r   )r-   rD   rE   s       r   rD   zNOT.has_object_permissionh   s   € Ø—8‘8×1Ñ1°'¸4ÀÓEÐEÐEr   NrG   r$   r   r   r   r   a   s   „ òò:óFr   r   c                   ó   — e Zd Zy)ÚBasePermissionMetaclassN)r!   r"   r#   r$   r   r   rQ   rQ   l   s   „ Ør   rQ   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_permissionu   ó   € ð r   c                  ó   — yrU   r$   rE   s       r   rD   z$BasePermission.has_object_permission{   rV   r   N)r!   r"   r#   Ú__doc__r>   rD   r$   r   r   rS   rS   p   s   „ ñòór   rS   )Ú	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#   rX   r>   r$   r   r   r[   r[   ‚   s   „ ñór   r[   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   )ra   rb   Úis_staffr?   s      r   r>   zIsAdminUser.has_permissionœ   s    € Ü�G—L‘LÒ: W§\¡\×%:Ñ%:Ó;Ð;r   Nr]   r$   r   r   re   re   —   s   „ ñó<r   re   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   )ra   ÚmethodÚSAFE_METHODSrb   rc   r?   s      r   r>   z(IsAuthenticatedOrReadOnly.has_permission¥   s9   € ÜØ�N‰NœlÐ*ò *Ø�L‰Lò *Ø�L‰L×)Ñ)ó
ð 	
r   Nr]   r$   r   r   ri   ri       s   „ ñó
r   ri   c                   óF   — e Zd ZdZdgg d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.
    z!%(app_label)s.view_%(model_name)sú %(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©Ú_metary   rz   Ú	perms_mapr   ÚMethodNotAllowed©r   rk   Ú	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   rA   r†   s      r   Ú	_querysetz DjangoModelPermissions._queryset×   s™   € Ü�t˜^Ô,Ü�t˜Z¨Ó.Ð:ð	*ð>ç
‰&�—‘×(Ñ(Ó
)ó		*ð ;ô �4˜Ô(Ø×(Ñ(Ó*ˆHØÐ'ð Ø1×8Ñ8¸¿¹×9PÑ9PÓQóÐ'ð ˆOØ�}‰}Ðr   c                 óÂ  — |j                   r"|j                   j                  s| j                  ryt        |dd«      ry| j	                  |«      }| j                  |j                  |j                  «      }| j                  d|j                  «      }|j                   }|j                  dk(  r$|j                  |«      xs |j                  |«      S |j                  |«      S )NFÚ_ignore_model_permissionsTrt   r   )	rb   rc   Úauthenticated_users_onlyrˆ   r‹   r‚   rk   ÚmodelÚ	has_perms)r   r@   rA   r†   ÚpermsÚchange_permrb   s          r   r>   z%DjangoModelPermissions.has_permissionæ   s²   € Ø�|Š|Ø�|‰|×,Ò,°×1NÒ1NØô �4Ð4°eÔ<Øà—>‘> $Ó'ˆØ×-Ñ-¨g¯n©n¸h¿n¹nÓMˆØ×3Ñ3°E¸8¿>¹>ÓJˆà�|‰|ˆØ�>‰>˜UÒ"Ø—>‘> %Ó(ÒG¨D¯N©N¸;Ó,GÐGà�~‰~˜eÓ$Ð$r   N)	r!   r"   r#   rX   r}   rŽ   r‚   r‹   r>   r$   r   r   rn   rn   ­   sO   „ ñ	ð 4Ð4ØØ4Ð5Ø3Ð4Ø5Ð6Ø7Ð8Ø8Ð9ñ€Ið  $ÐòBòó%r   rn   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#   rX   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.
    ro   rp   rq   rr   c                 óì   — |j                   j                  |j                   j                  dœ}|| j                  vrt	        j
                  |«      ‚| j                  |   D �cg c]  }||z  ‘Œ	 c}S c c}w )Nrx   r{   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�   rb   r˜   rk   r�   rl   r   )	r   r@   rA   rF   r†   r€   rb   r‘   Ú
read_permss	            r   rD   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#   rX   r}   r˜   rD   r$   r   r   r–   r–     s<   „ ñ	ð ØØØ3Ð4Ø5Ð6Ø7Ð8Ø8Ð9ñ€Iò	Bór   r–   N)rX   Údjango.httpr   Úrest_frameworkr   rl   r	   r   r   r   r   r   ÚtyperQ   rS   r[   r_   re   ri   rn   r”   r–   r$   r   r   ú<module>rž      sÒ   ðñõ  å %à)€÷.ñ .ô"(Ð.ô (ô
Ð(ô 
÷(
ñ 
÷$
ñ 
÷*Fñ Fô	Ð2°Dô 	ôÐ6õ ô$	ˆ~ô 	ôD�nô Dô<�.ô <ô

 ô 

ôK%˜^ô K%ô\%Ð+Aô %ô9Ð4õ 9r   