
    _}dg|%                        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     Y/var/www/surfInsights/venv3-11/lib/python3.11/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,    dnd-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 ZdS )r   c                 0    || _         || _        || _        d S r   )r(   r)   	op2_class)r   r(   r)   r2   s       r   r*   zOperandHolder.__init__'   s    ,""r   c                 b     | j         |i |} | j        |i |}|                     ||          S r   )r)   r2   r(   )r   r,   r-   r.   op2s        r   r/   zOperandHolder.__call__,   sD    dnd-f--dnd-f--""3,,,r   c                     t          |t                    o/| j        |j        k    o| j        |j        k    o| j        |j        k    S r   )
isinstancer   r(   r)   r2   r   s     r   __eq__zOperandHolder.__eq__1   sK    um,, .5#77.Neo-. Neo-		
r   c                 D    t          | j        | j        | j        f          S r   )hashr(   r)   r2   r    s    r   __hash__zOperandHolder.__hash__9   s    T($.$.IJJJr   N)r"   r#   r$   r*   r/   r7   r:   r%   r   r   r   r   &   sU        # # #
- - -

 
 
K K K K Kr   r   c                        e Zd Zd Zd Zd ZdS )r   c                 "    || _         || _        d S r   r.   r4   r   r.   r4   s      r   r*   zAND.__init__>       r   c                 n    | j                             ||          o| j                            ||          S r   r.   has_permissionr4   r   requestviews      r   rB   zAND.has_permissionB   6    H##GT22 3H##GT22	
r   c                 r    | j                             |||          o| j                            |||          S r   )r.   has_object_permissionr4   r   rD   rE   objs       r   rH   zAND.has_object_permissionH   s:    H**7D#>> ?H**7D#>>	
r   Nr"   r#   r$   r*   rB   rH   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=   r>   s      r   r*   zOR.__init__P   r?   r   c                 n    | j                             ||          p| j                            ||          S r   rA   rC   s      r   rB   zOR.has_permissionT   rF   r   c                     | j                             ||          o| j                             |||          p6| j                            ||          o| j                            |||          S r   )r.   rB   rH   r4   rI   s       r   rH   zOR.has_object_permissionZ   sr    H##GT22 C..wcBB
 H##GT22 C..wcBB	
r   NrK   r%   r   r   r   r   O   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__e   s    r   c                 :    | j                             ||           S r   )r.   rB   rC   s      r   rB   zNOT.has_permissionh   s    8**7D9999r   c                 <    | j                             |||           S r   )r.   rH   rI   s       r   rH   zNOT.has_object_permissionk   s    811'4EEEEr   NrK   r%   r   r   r   r   d   sF          : : :F F F F Fr   r   c                       e Zd ZdS )BasePermissionMetaclassN)r"   r#   r$   r%   r   r   rU   rU   o   s        Dr   rU   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%   rC   s      r   rB   zBasePermission.has_permissionx   	     tr   c                     dS rY   r%   rI   s       r   rH   z$BasePermission.has_object_permission~   rZ   r   N)r"   r#   r$   __doc__rB   rH   r%   r   r   rW   rW   s   s<               r   rW   )	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%   rC   s      r   rB   zAllowAny.has_permission   s    tr   Nr"   r#   r$   r\   rB   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_authenticatedrC   s      r   rB   zIsAuthenticated.has_permission   s    GLBW\%BCCCr   Nra   r%   r   r   rc   rc      s2         D D D D Dr   rc   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   )re   rf   is_staffrC   s      r   rB   zIsAdminUser.has_permission   s    GL:W\%:;;;r   Nra   r%   r   r   ri   ri      s-         < < < < <r   ri   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   )re   methodSAFE_METHODSrf   rg   rC   s      r   rB   z(IsAuthenticatedOrReadOnly.has_permission   s5    Nl* *L *L)
 
 	
r   Nra   r%   r   r   rm   rm      s-         
 
 
 
 
r   rm   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   _metar}   r~   	perms_mapr   MethodNotAllowedr   ro   	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   rE   r   s      r   	_querysetz DjangoModelPermissions._queryset   s    t^,, 	*tZ..::>
&(
)
) ;::
 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)	rf   rg   authenticated_users_onlyr   r   r   ro   model	has_perms)r   rD   rE   r   permss        r   rB   z%DjangoModelPermissions.has_permission   s    | 	|,	151N	5 44e<< 	4>>$''--gnhnMM|%%e,,,r   N)	r"   r#   r$   r\   r   r   r   r   rB   r%   r   r   rr   rr      s        	 	 34567889 I  $B B B  - - - - -r   rr   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$   r\   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.
    rs   rt   ru   rv   c                     |j         j        |j         j        d|| j        vrt	          j        |          fd| j        |         D             S )Nr|   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   rf   r   ro   r   rp   r   )	r   rD   rE   rJ   r   r   rf   r   
read_permss	            r   rH   z-DjangoObjectPermissions.has_object_permission!  s    >>$''N	|44W^YOO~~eS)) 	
 ~-- ==eYOOJ>>*c22  5tr   N)r"   r#   r$   r\   r   r   rH   r%   r   r   r   r     sn        	 	 34567889 I	B 	B 	B    r   r   N)r\   django.httpr   rest_frameworkr   rp   r	   r   r   r   r   r   typerU   rW   r_   rc   ri   rm   rr   r   r   r%   r   r   <module>r      s           % % % % % %). . . . . . . ."( ( ( ( (. ( ( (K K K K K( K K K.
 
 
 
 
 
 
 
$
 
 
 
 
 
 
 
*F F F F F F F F	 	 	 	 	2D 	 	 	    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   