
    h|%                     d   S r SSKJr  SSKJr  Sr " S S5      r " S S\5      r " S	 S
\5      r " S S5      r	 " S S5      r
 " S S5      r " S S\\5      r " S S\S9r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S  S!\5      r " S" S#\5      rg$)%z2
Provides a set of pluggable permission policies.
    )Http404)
exceptions)GETHEADOPTIONSc                   2    \ rS rSrS rS rS rS rS rSr	g)	OperationHolderMixin   c                 "    [        [        X5      $ NOperandHolderANDselfothers     L/var/www/html/env/lib/python3.13/site-packages/rest_framework/permissions.py__and__OperationHolderMixin.__and__   s    S$..    c                 "    [        [        X5      $ r   r   ORr   s     r   __or__OperationHolderMixin.__or__   s    R--r   c                 "    [        [        X5      $ r   r   r   s     r   __rand__OperationHolderMixin.__rand__   s    S%..r   c                 "    [        [        X5      $ r   r   r   s     r   __ror__OperationHolderMixin.__ror__   s    R--r   c                 "    [        [        U 5      $ r   )SingleOperandHolderNOTr   s    r   
__invert__OperationHolderMixin.__invert__   s    "3--r    N)
__name__
__module____qualname____firstlineno__r   r   r   r    r&   __static_attributes__r(   r   r   r	   r	      s    /./..r   r	   c                        \ rS rSrS rS rSrg)r#      c                     Xl         X l        g r   )operator_class	op1_class)r   r1   r2   s      r   __init__SingleOperandHolder.__init__   s    ,"r   c                 H    U R                   " U0 UD6nU R                  U5      $ r   r2   r1   )r   argskwargsop1s       r   __call__SingleOperandHolder.__call__!   s&    nnd-f-""3''r   r6   N)r)   r*   r+   r,   r3   r:   r-   r(   r   r   r#   r#      s    #(r   r#   c                   ,    \ rS rSrS rS rS rS rSrg)r   &   c                 (    Xl         X l        X0l        g r   )r1   r2   	op2_class)r   r1   r2   r?   s       r   r3   OperandHolder.__init__'   s    ,""r   c                 l    U R                   " U0 UD6nU R                  " U0 UD6nU R                  X45      $ r   r2   r?   r1   )r   r7   r8   r9   op2s        r   r:   OperandHolder.__call__,   s9    nnd-f-nnd-f-""3,,r   c                     [        U[        5      =(       aY    U R                  UR                  :H  =(       a9    U R                  UR                  :H  =(       a    U R                  UR                  :H  $ r   )
isinstancer   r1   r2   r?   r   s     r   __eq__OperandHolder.__eq__1   sV    um, .5#7#77.NNeoo-. NNeoo-		
r   c                 Z    [        U R                  U R                  U R                  45      $ r   )hashr1   r2   r?   r%   s    r   __hash__OperandHolder.__hash__9   s"    T(($..$..IJJr   rB   N)	r)   r*   r+   r,   r3   r:   rG   rK   r-   r(   r   r   r   r   &   s    #
-

Kr   r   c                   &    \ rS rSrS rS rS rSrg)r   =   c                     Xl         X l        g r   r9   rC   r   r9   rC   s      r   r3   AND.__init__>       r   c                 |    U R                   R                  X5      =(       a    U R                  R                  X5      $ r   r9   has_permissionrC   r   requestviews      r   rV   AND.has_permissionB   0    HH##G2 3HH##G2	
r   c                     U R                   R                  XU5      =(       a    U R                  R                  XU5      $ r   )r9   has_object_permissionrC   r   rX   rY   objs       r   r]   AND.has_object_permissionH   s4    HH**7#> ?HH**7#>	
r   rP   Nr)   r*   r+   r,   r3   rV   r]   r-   r(   r   r   r   r   =   s    

r   r   c                   &    \ rS rSrS rS rS rSrg)r   O   c                     Xl         X l        g r   rP   rQ   s      r   r3   OR.__init__P   rS   r   c                 |    U R                   R                  X5      =(       d    U R                  R                  X5      $ r   rU   rW   s      r   rV   OR.has_permissionT   r[   r   c                    U R                   R                  X5      =(       a    U R                   R                  XU5      =(       d>    U R                  R                  X5      =(       a    U R                  R                  XU5      $ r   )r9   rV   r]   rC   r^   s       r   r]   OR.has_object_permissionZ   sf    HH##G2 C..wcB
 HH##G2 C..wcB	
r   rP   Nra   r(   r   r   r   r   O   s    

r   r   c                   &    \ rS rSrS rS rS rSrg)r$   d   c                     Xl         g r   r9   )r   r9   s     r   r3   NOT.__init__e   s    r   c                 B    U R                   R                  X5      (       + $ r   )r9   rV   rW   s      r   rV   NOT.has_permissionh   s    88**7999r   c                 D    U R                   R                  XU5      (       + $ r   )r9   r]   r^   s       r   r]   NOT.has_object_permissionk   s    8811'EEEr   rm   Nra   r(   r   r   r$   r$   d   s    :Fr   r$   c                       \ rS rSrSrg)BasePermissionMetaclasso   r(   N)r)   r*   r+   r,   r-   r(   r   r   rt   rt   o   s    r   rt   c                   $    \ rS rSrSrS rS rSrg)BasePermissions   z@
A base class from which all permission classes should inherit.
c                     gz<
Return `True` if permission is granted, `False` otherwise.
Tr(   rW   s      r   rV   BasePermission.has_permissionx        r   c                     grz   r(   r^   s       r   r]   $BasePermission.has_object_permission~   r|   r   r(   N)r)   r*   r+   r,   __doc__rV   r]   r-   r(   r   r   rw   rw   s   s    r   rw   )	metaclassc                       \ rS rSrSrS rSrg)AllowAny   z
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                     g)NTr(   rW   s      r   rV   AllowAny.has_permission   s    r   r(   Nr)   r*   r+   r,   r   rV   r-   r(   r   r   r   r      s    r   r   c                       \ rS rSrSrS rSrg)IsAuthenticated   z,
Allows access only to authenticated users.
c                 f    [        UR                  =(       a    UR                  R                  5      $ r   )booluseris_authenticatedrW   s      r   rV   IsAuthenticated.has_permission   s     GLLBW\\%B%BCCr   r(   Nr   r(   r   r   r   r      s    Dr   r   c                       \ rS rSrSrS rSrg)IsAdminUser   z$
Allows access only to admin users.
c                 f    [        UR                  =(       a    UR                  R                  5      $ r   )r   r   is_staffrW   s      r   rV   IsAdminUser.has_permission   s     GLL:W\\%:%:;;r   r(   Nr   r(   r   r   r   r      s    <r   r   c                       \ rS rSrSrS rSrg)IsAuthenticatedOrReadOnly   zD
The request is authenticated as a user, or is a read-only request.
c                     [        UR                  [        ;   =(       d)    UR                  =(       a    UR                  R                  5      $ r   )r   methodSAFE_METHODSr   r   rW   s      r   rV   (IsAuthenticatedOrReadOnly.has_permission   s9    NNl* *LL *LL))
 	
r   r(   Nr   r(   r   r   r   r      s    
r   r   c                   J    \ rS rSrSr/ / / S/S/S/S/S.rSrS rS	 rS
 r	Sr
g)DjangoModelPermissions   aa  
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                     UR                   R                  UR                   R                  S.nXR                  ;  a  [        R
                  " U5      eU R                  U    Vs/ s H  oDU-  PM	     sn$ s  snf )zj
Given a model and an HTTP method, return the list of permission
codes that the user is required to have.
	app_label
model_name_metar   r   	perms_mapr   MethodNotAllowedr   r   	model_clsr8   perms        r   get_required_permissions/DjangoModelPermissions.get_required_permissions   sg     #22#//44

 '--f55*...*@A*@$v*@AAA   $A5c                 L   [        US5      (       d8  [        USS 5      c*   SR                  U R                  R                  5      5       e[        US5      (       a?  UR                  5       nUc*   SR                  UR                  R                  5      5       eU$ UR                  $ )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   rY   r   s      r   	_queryset DjangoModelPermissions._queryset   s    t^,,tZ.:	*>
&((
)		* ; 4((((*H' 1889P9PQ' O}}r   c                 H   UR                   (       a,  UR                   R                  (       d  U R                  (       a  g[        USS5      (       a  gU R	                  U5      nU R                  UR                  UR                  5      nUR                   R                  U5      $ )NF_ignore_model_permissionsT)	r   r   authenticated_users_onlyr   r   r   r   model	has_perms)r   rX   rY   r   permss        r   rV   %DjangoModelPermissions.has_permission   ss    ||||,,1N1N 44e<<>>$'--gnnhnnM||%%e,,r   r(   N)r)   r*   r+   r,   r   r   r   r   r   rV   r-   r(   r   r   r   r      sI    	 34567889I  $B-r   r   c                       \ rS rSrSrSrSrg)$DjangoModelPermissionsOrAnonReadOnly   z^
Similar to DjangoModelPermissions, except that anonymous users are
allowed read-only access.
Fr(   N)r)   r*   r+   r,   r   r   r-   r(   r   r   r   r      s      %r   r   c                   @    \ rS rSrSr/ / / S/S/S/S/S.rS rS rS	rg
)DjangoObjectPermissionsi  a{  
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.
r   r   r   r   c                     UR                   R                  UR                   R                  S.nXR                  ;  a  [        R
                  " U5      eU R                  U    Vs/ s H  oDU-  PM	     sn$ s  snf )Nr   r   r   s        r   get_required_object_permissions7DjangoObjectPermissions.get_required_object_permissions  se    "22#//44

 '--f55*...*@A*@$v*@AAAr   c                 L   U R                  U5      nUR                  nUR                  nU R                  UR                  U5      nUR                  Xs5      (       dI  UR                  [        ;   a  [        eU R                  SU5      nUR                  X5      (       d  [        egg)Nr   FT)r   r   r   r   r   r   r   r   )	r   rX   rY   r_   r   r   r   r   
read_permss	            r   r]   -DjangoObjectPermissions.has_object_permission!  s    >>$'NN	||44W^^YO~~e))
 ~~- ==eYOJ>>*22 r   r(   N)	r)   r*   r+   r,   r   r   r   r]   r-   r(   r   r   r   r     s<    	 34567889I	Br   r   N)r   django.httpr   rest_frameworkr   r   r	   r#   r   r   r   r$   typert   rw   r   r   r   r   r   r   r   r(   r   r   <module>r      s      %). ."(. (K( K.
 
$
 
*F F	2D 	6 $	~ 	Dn D<. <

 

F-^ F-R%+A %94 9r   