§
    óäMf%  ã                   óÆ  — 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d$S )%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dS )ÚOperationHolderMixinc                 ó.   — t          t          | |¦  «        S ©N©ÚOperandHolderÚAND©ÚselfÚothers     úYC:\Users\psant\Downloads\sloar back\myenv\Lib\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dS )r   c                 ó"   — || _         || _        d S r   )Úoperator_classÚ	op1_class)r   r'   r(   s      r   Ú__init__zSingleOperandHolder.__init__   s   € Ø,ˆÔØ"ˆŒˆˆr   c                 óF   —  | j         |i |¤Ž}|                      |¦  «        S r   )r(   r'   )r   ÚargsÚkwargsÚop1s       r   Ú__call__zSingleOperandHolder.__call__!   s,   € ØˆdŒn˜dÐ- fÐ-Ð-ˆØ×"Ò" 3Ñ'Ô'Ð'r   N)r!   r"   r#   r)   r.   r$   r   r   r   r      s2   € € € € € ð#ð #ð #ð(ð (ð (ð (ð (r   r   c                   ó    — e Zd Zd„ Zd„ Zd„ ZdS )r   c                 ó0   — || _         || _        || _        d S r   )r'   r(   Ú	op2_class)r   r'   r(   r1   s       r   r)   zOperandHolder.__init__'   s   € Ø,ˆÔØ"ˆŒØ"ˆŒˆˆr   c                 ób   —  | j         |i |¤Ž} | j        |i |¤Ž}|                      ||¦  «        S r   )r(   r1   r'   )r   r+   r,   r-   Úop2s        r   r.   zOperandHolder.__call__,   sD   € ØˆdŒn˜dÐ- fÐ-Ð-ˆØˆdŒn˜dÐ- fÐ-Ð-ˆØ×"Ò" 3¨Ñ,Ô,Ð,r   c                 óŒ   — t          |t          ¦  «        o/| j        |j        k    o| j        |j        k    o| j        |j        k    S r   )Ú
isinstancer   r'   r(   r1   r   s     r   Ú__eq__zOperandHolder.__eq__1   sK   € å�u�mÑ,Ô,ð .ØÔ 5Ô#7Ò7ð.àŒN˜eœoÒ-ð.ð ŒN˜eœoÒ-ð		
r   N)r!   r"   r#   r)   r.   r6   r$   r   r   r   r   &   sA   € € € € € ð#ð #ð #ð
-ð -ð -ð

ð 
ð 
ð 
ð 
r   r   c                   ó    — e Zd Zd„ Zd„ Zd„ ZdS )r   c                 ó"   — || _         || _        d S r   ©r-   r3   ©r   r-   r3   s      r   r)   zAND.__init__;   ó   € ØˆŒØˆŒˆˆr   c                 ón   — | j                              ||¦  «        o| j                             ||¦  «        S r   ©r-   Úhas_permissionr3   ©r   ÚrequestÚviews      r   r>   zAND.has_permission?   ó6   € àŒH×#Ò# G¨TÑ2Ô2ð 3ØŒH×#Ò# G¨TÑ2Ô2ð	
r   c                 ór   — | j                              |||¦  «        o| j                             |||¦  «        S r   )r-   Úhas_object_permissionr3   ©r   r@   rA   Úobjs       r   rD   zAND.has_object_permissionE   s:   € àŒH×*Ò*¨7°D¸#Ñ>Ô>ð ?ØŒH×*Ò*¨7°D¸#Ñ>Ô>ð	
r   N©r!   r"   r#   r)   r>   rD   r$   r   r   r   r   :   sA   € € € € € ðð ð ð
ð 
ð 
ð
ð 
ð 
ð 
ð 
r   r   c                   ó    — e Zd Zd„ Zd„ Zd„ ZdS )r   c                 ó"   — || _         || _        d S r   r9   r:   s      r   r)   zOR.__init__M   r;   r   c                 ón   — | j                              ||¦  «        p| j                             ||¦  «        S r   r=   r?   s      r   r>   zOR.has_permissionQ   rB   r   c                 óÞ   — | j                              ||¦  «        o| j                              |||¦  «        p6| j                             ||¦  «        o| j                             |||¦  «        S r   )r-   r>   rD   r3   rE   s       r   rD   zOR.has_object_permissionW   sr   € àŒH×#Ò# G¨TÑ2Ô2ð CØ”×.Ò.¨w¸¸cÑBÔBð
ð ŒH×#Ò# G¨TÑ2Ô2ð CØ”×.Ò.¨w¸¸cÑBÔBð	
r   NrG   r$   r   r   r   r   L   sA   € € € € € ðð ð ð
ð 
ð 
ð
ð 
ð 
ð 
ð 
r   r   c                   ó    — e Zd Zd„ Zd„ Zd„ ZdS )r   c                 ó   — || _         d S r   )r-   )r   r-   s     r   r)   zNOT.__init__b   s   € ØˆŒˆˆr   c                 ó:   — | j                              ||¦  «         S r   )r-   r>   r?   s      r   r>   zNOT.has_permissione   s   € Ø”8×*Ò*¨7°DÑ9Ô9Ð9Ð9r   c                 ó<   — | j                              |||¦  «         S r   )r-   rD   rE   s       r   rD   zNOT.has_object_permissionh   s   € Ø”8×1Ò1°'¸4ÀÑEÔEÐEÐEr   NrG   r$   r   r   r   r   a   sF   € € € € € ðð ð ð:ð :ð :ðFð Fð Fð Fð Fr   r   c                   ó   — e Zd ZdS )ÚBasePermissionMetaclassN)r!   r"   r#   r$   r   r   rQ   rQ   l   s   € € € € € Ø€Dr   rQ   c                   ó   — e Zd ZdZd„ Zd„ ZdS )ÚBasePermissionzH
    A base class from which all permission classes should inherit.
    c                 ó   — dS ©zL
        Return `True` if permission is granted, `False` otherwise.
        Tr$   r?   s      r   r>   zBasePermission.has_permissionu   ó	   € ð ˆtr   c                 ó   — dS 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dS )Ú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                 ó   — dS )NTr$   r?   s      r   r>   zAllowAny.has_permissionŠ   s   € Øˆtr   N©r!   r"   r#   rX   r>   r$   r   r   r[   r[   ‚   s-   € € € € € ðð ðð ð ð ð r   r[   c                   ó   — e Zd ZdZd„ ZdS )ÚIsAuthenticatedz4
    Allows access only to authenticated users.
    c                 óB   — t          |j        o|j        j        ¦  «        S r   )ÚboolÚuserÚis_authenticatedr?   s      r   r>   zIsAuthenticated.has_permission“   s   € Ý�G”LÐB W¤\Ô%BÑCÔCÐCr   Nr]   r$   r   r   r_   r_   Ž   s2   € € € € € ðð ðDð Dð Dð Dð Dr   r_   c                   ó   — e Zd ZdZd„ ZdS )ÚIsAdminUserz,
    Allows access only to admin users.
    c                 óB   — t          |j        o|j        j        ¦  «        S r   )ra   rb   Úis_staffr?   s      r   r>   zIsAdminUser.has_permissionœ   s   € Ý�G”LÐ: W¤\Ô%:Ñ;Ô;Ð;r   Nr]   r$   r   r   re   re   —   s-   € € € € € ðð ð<ð <ð <ð <ð <r   re   c                   ó   — e Zd ZdZd„ ZdS )ÚIsAuthenticatedOrReadOnlyzL
    The request is authenticated as a user, or is a read-only request.
    c                 ó^   — t          |j        t          v p|j        o|j        j        ¦  «        S r   )ra   ÚmethodÚSAFE_METHODSrb   rc   r?   s      r   r>   z(IsAuthenticatedOrReadOnly.has_permission¥   s5   € ÝØŒN�lÐ*ð *ØŒLð *ØŒLÔ)ñ
ô 
ð 	
r   Nr]   r$   r   r   ri   ri       s-   € € € € € ðð ð
ð 
ð 
ð 
ð 
r   ri   c                   óD   — 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d
S )Ú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        |¦  «        ‚ˆfd„| j        |         D ¦   «         S )z‚
        Given a model and an HTTP method, return the list of permission
        codes that the user is required to have.
        ©Ú	app_labelÚ
model_namec                 ó   •— g | ]}|‰z  ‘ŒS r$   r$   ©Ú.0Úpermr,   s     €r   ú
<listcomp>zCDjangoModelPermissions.get_required_permissions.<locals>.<listcomp>Õ   ó   ø€ ÐAÐAÐA $��v‘ÐAÐAÐAr   ©Ú_metary   rz   Ú	perms_mapr   ÚMethodNotAllowed©r   rk   Ú	model_clsr,   s      @r   Úget_required_permissionsz/DjangoModelPermissions.get_required_permissionsÈ   sb   ø€ ð #œÔ2Ø#œ/Ô4ð
ð 
ˆð
 ˜œÐ'Ð'ÝÔ-¨fÑ5Ô5Ð5àAÐAÐAÐA¨$¬.¸Ô*@ÐAÑAÔAÐAr   c                 ó>  — t          |d¦  «        s8t          |dd ¦  «        €'J d                     | j        j        ¦  «        ¦   «         ‚t          |d¦  «        r?|                     ¦   «         }|€'J d                     |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ÑQÔQñ (Ô'Ð'ð ˆOØŒ}Ðr   c                 óþ   — |j         r|j         j        s	| j        rdS t          |dd¦  «        rdS |                      |¦  «        }|                      |j        |j        ¦  «        }|j                              |¦  «        S )NFÚ_ignore_model_permissionsT)	rb   rc   Úauthenticated_users_onlyrŒ   r�   r‡   rk   ÚmodelÚ	has_perms)r   r@   rA   rŠ   Úpermss        r   r>   z%DjangoModelPermissions.has_permissionæ   s…   € ØŒ|ð 	ØŒ|Ô,ð	Ø15Ô1Nð	à�5õ �4Ð4°eÑ<Ô<ð 	Ø�4à—>’> $Ñ'Ô'ˆØ×-Ò-¨g¬n¸h¼nÑMÔMˆàŒ|×%Ò% eÑ,Ô,Ð,r   N)	r!   r"   r#   rX   rƒ   r’   r‡   r�   r>   r$   r   r   rn   rn   ­   s…   € € € € € ð	ð 	ð ØØØ3Ð4Ø5Ð6Ø7Ð8Ø8Ð9ðð €Ið  $ÐðBð Bð Bðð ð ð-ð -ð -ð -ð -r   rn   c                   ó   — e Zd ZdZdZdS )Ú$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                   ó:   — e Zd ZdZg g g dgdgdgdgdœZd„ Zd„ ZdS )	Ú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        |¦  «        ‚ˆfd„| j        |         D ¦   «         S )Nrx   c                 ó   •— g | ]}|‰z  ‘ŒS r$   r$   r|   s     €r   r   zKDjangoObjectPermissions.get_required_object_permissions.<locals>.<listcomp>  r€   r   r�   r…   s      @r   Úget_required_object_permissionsz7DjangoObjectPermissions.get_required_object_permissions  s`   ø€ à"œÔ2Ø#œ/Ô4ð
ð 
ˆð
 ˜œÐ'Ð'ÝÔ-¨fÑ5Ô5Ð5àAÐAÐAÐA¨$¬.¸Ô*@ÐAÑAÔAÐAr   c                 óB  — |                       |¦  «        }|j        }|j        }|                      |j        |¦  «        }|                     ||¦  «        sJ|j        t          v rt          ‚|                      d|¦  «        }|                     ||¦  «        st          ‚dS dS )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ˆ	ØŒ|ˆà×4Ò4°W´^ÀYÑOÔOˆà�~Š~˜e SÑ)Ô)ð 	ð
 Œ~¥Ð-Ð-õ �à×=Ò=¸eÀYÑOÔOˆJØ—>’> *¨cÑ2Ô2ð Ý�ð �5àˆtr   N)r!   r"   r#   rX   rƒ   rœ   rD   r$   r   r   r™   r™   þ   sn   € € € € € ð	ð 	ð ØØØ3Ð4Ø5Ð6Ø7Ð8Ø8Ð9ðð €Ið	Bð 	Bð 	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ð Fð Fð Fñ Fô Fð Fð	ð 	ð 	ð 	ð 	Ð2°Dñ 	ô 	ð 	ðð ð ð ð Ð6ð ñ ô ð ð$	ð 	ð 	ð 	ð 	ˆ~ñ 	ô 	ð 	ðDð Dð Dð Dð D�nñ Dô Dð Dð<ð <ð <ð <ð <�.ñ <ô <ð <ð

ð 

ð 

ð 

ð 

 ñ 

ô 

ð 

ðF-ð F-ð F-ð F-ð F-˜^ñ F-ô F-ð F-ðR%ð %ð %ð %ð %Ð+Añ %ô %ð %ð9ð 9ð 9ð 9ð 9Ð4ñ 9ô 9ð 9ð 9ð 9r   