
    ^f$                        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     L/var/www/html/env/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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   Nr/   r$   r   r   r   r   &   s2        # # #
- - - - -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__3       r   c                 n    | j                             ||          o| j                            ||          S r   r-   has_permissionr4   r   requestviews      r   r<   zAND.has_permission7   6    H##GT22 3H##GT22	
r   c                 r    | j                             |||          o| j                            |||          S r   )r-   has_object_permissionr4   r   r>   r?   objs       r   rB   zAND.has_object_permission=   s:    H**7D#>> ?H**7D#>>	
r   Nr!   r"   r#   r)   r<   rB   r$   r   r   r   r   2   sA          
 
 

 
 
 
 
r   r   c                        e Zd Zd Zd Zd ZdS )r   c                 "    || _         || _        d S r   r7   r8   s      r   r)   zOR.__init__E   r9   r   c                 n    | j                             ||          p| j                            ||          S r   r;   r=   s      r   r<   zOR.has_permissionI   r@   r   c                     | j                             ||          o| j                             |||          p6| j                            ||          o| j                            |||          S r   )r-   r<   rB   r4   rC   s       r   rB   zOR.has_object_permissionO   sr    H##GT22 C..wcBB
 H##GT22 C..wcBB	
r   NrE   r$   r   r   r   r   D   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__Z   s    r   c                 :    | j                             ||           S r   )r-   r<   r=   s      r   r<   zNOT.has_permission]   s    8**7D9999r   c                 <    | j                             |||           S r   )r-   rB   rC   s       r   rB   zNOT.has_object_permission`   s    811'4EEEEr   NrE   r$   r   r   r   r   Y   sF          : : :F F F F Fr   r   c                       e Zd ZdS )BasePermissionMetaclassN)r!   r"   r#   r$   r   r   rO   rO   d   s        Dr   rO   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_permissionm   	     tr   c                     dS 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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#   rV   r<   r$   r   r   rY   rY   z   s-             r   rY   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    GLBW\%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   )r_   r`   is_staffr=   s      r   r<   zIsAdminUser.has_permission   s    GL:W\%:;;;r   Nr[   r$   r   r   rc   rc      s-         < < < < <r   rc   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   )r_   methodSAFE_METHODSr`   ra   r=   s      r   r<   z(IsAuthenticatedOrReadOnly.has_permission   s5    Nl* *L *L)
 
 	
r   Nr[   r$   r   r   rg   rg      s-         
 
 
 
 
r   rg   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   _metarw   rx   	perms_mapr   MethodNotAllowedr   ri   	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   r?   r   s      r   	_querysetz DjangoModelPermissions._queryset   s    t^,, 	*tZ..::>
&(
)
) ;:; 4(( 	((**H''1889PQQ ('' O}r   c                     t          |dd          rdS |j        r|j        j        s	| j        rdS |                     |          }|                     |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   s     44e<< 	4| 	|,	151N	5>>$''--gnhnMM|%%e,,,r   N)	r!   r"   r#   rV   r   r   r   r   r<   r$   r   r   rl   rl      s        	 	 34567889 I  $B B B  - - - - -r   rl   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#   rV   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.
    rm   rn   ro   rp   c                     |j         j        |j         j        d|| j        vrt	          j        |          fd| j        |         D             S )Nrv   c                     g | ]}|z  S r$   r$   rz   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   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	|44W^YOO~~eS)) 	
 ~-- ==eYOOJ>>*c22  5tr   N)r!   r"   r#   rV   r   r   rB   r$   r   r   r   r      sn        	 	 34567889 I	B 	B 	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 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   