a
    }h                     @   sB  d dl mZ d dlmZ d dlmZ d dlmZmZ d dl	m
Z
 d dlmZmZ e Ze D ]Zeeedi   q^eeZesJ G dd	 d	ZG d
d deeZG dd deeZG dd deZG dd deZG dd deZeeeef dddZeeeef dddZdd Z dd Z!dd Z"d#d d!Z#d"S )$    )Union)settings)cache)
migrationstransaction)available_perm_names)RolesManagerget_user_rolesavailable_permissionsc                   @   s   e Zd Zdd Zdd ZdS )	Chainablec                 C   s   t | tr
t| |S N)
isinstanceAllselfother r   TC:\Users\Administrator\Downloads\futplus_django\customrolepermissions\permissions.py__and__   s    
zChainable.__and__c                 C   s
   t | |S r   )Anyr   r   r   r   __or__   s    zChainable.__or__N)__name__
__module____qualname__r   r   r   r   r   r   r      s   r   c                       s   e Zd Z fddZ  ZS )Pc                    s<   t |tttfrt|dkr*td|tt| | |S )N zwrong permission type `{}`)r   PermissionGroupr   str
ValueErrorformatsuper__new__)cls
permission	__class__r   r   r!      s    z	P.__new__)r   r   r   r!   __classcell__r   r   r$   r   r      s   r   c                       s,   e Zd Z fddZdd Zdd Z  ZS )r   c                    sh   g }|D ]*}t |tttfr(t|dkr|| q|rVtdddd |D tt| 	| |S )Nr   zwrong permissions type `{}`z`, `c                 s   s   | ]}t |V  qd S r   r   .0pr   r   r   	<genexpr>*       z*PermissionGroup.__new__.<locals>.<genexpr>)
r   r   r   r   appendr   r   joinr    r!   )r"   permissionserrorsr*   r$   r   r   r!   $   s    zPermissionGroup.__new__c                 C   s   t d S r   NotImplementedErrorr   userr   r   r   __call__-   s    zPermissionGroup.__call__c                 C   s   t dd S )Nz8PermissionGroup evaluation without a user is meaninglessr1   r   r   r   r   __bool__0   s    zPermissionGroup.__bool__)r   r   r   r!   r5   r7   r&   r   r   r$   r   r   #   s   	r   c                   @   s   e Zd Zdd Zdd ZdS )r   c                    s   t  fdd| D S )Nc                 3   s   | ]}t  |V  qd S r   has_permission_exactlyr)   r#   r4   r   r   r+   6   r,   zAll.__call__.<locals>.<genexpr>)allr3   r   r;   r   r5   5   s    zAll.__call__c                 C   s   dd dd | D  d S )N(z & c                 s   s   | ]}t |V  qd S r   r'   r(   r   r   r   r+   9   r,   zAll.__repr__.<locals>.<genexpr>)r.   r6   r   r   r   __repr__8   s    zAll.__repr__Nr   r   r   r5   r@   r   r   r   r   r   4   s   r   c                   @   s   e Zd Zdd Zdd ZdS )r   c                    s   t  fdd| D S )Nc                 3   s   | ]}t  |V  qd S r   r8   r:   r;   r   r   r+   >   r,   zAny.__call__.<locals>.<genexpr>anyr3   r   r;   r   r5   =   s    zAny.__call__c                 C   s   dd dd | D  d S )Nr=    | c                 s   s   | ]}t |V  qd S r   r'   r(   r   r   r   r+   A   r,   zAny.__repr__.<locals>.<genexpr>r>   r?   r6   r   r   r   r@   @   s    zAny.__repr__NrA   r   r   r   r   r   <   s   r   c                   @   s   e Zd Zdd Zdd ZdS )AnyWithCachec                    s   t  fdd| D S )Nc                 3   s   | ]}t  |V  qd S r   )!has_permission_exactly_with_cacher:   r;   r   r   r+   F   r,   z(AnyWithCache.__call__.<locals>.<genexpr>rB   r3   r   r;   r   r5   E   s    zAnyWithCache.__call__c                 C   s   dd dd | D  d S )Nr=   rD   c                 s   s   | ]}t |V  qd S r   r'   r(   r   r   r   r+   I   r,   z(AnyWithCache.__repr__.<locals>.<genexpr>r>   r?   r6   r   r   r   r@   H   s    zAnyWithCache.__repr__NrA   r   r   r   r   rE   D   s   rE   )permission_namec                 C   s,   t |tr|t| v S t |tr(|| S dS )'Check if a user has a given permission.N)r   r   r   r   )r4   rG   r   r   r   r9   L   s    

r9   c                 C   sl   t |trVtd| j d}|r*||v S t| }tjd| j d|dd ||v S nt |trh|| S dS )rH   Zuser_id_Z_permission_names   )timeoutN)r   r   r   getidr   setr   )r4   rG   Zcached_permission_namesZa_perm_namesr   r   r   rF   W   s    


rF   c                 C   sD   g }t | D ]2}t|di }| D ]\}}|jr$|| q$q|S )Nr
   r	   getattritemsgrantr-   )r4   grant_permissionsroler
   rG   stater   r   r   grant_perm_namesh   s    rU   c                 C   sh   g }g }t | D ]N}t|di }| D ]4\}}|jrJ||vr\|| q(||vr(|| q(q|| S )z
    Return a list of permissions codenames possible to a user, based on that user's roles.
    move Grant permissions to first of list
    r
   rN   )r4   rR   Zpossible_permissionsrS   r
   rG   rT   r   r   r   possible_perm_namesr   s    rV   c                 C   s   | j jddd}t  |D ]}|j}||v rf|| }|d u rJ|  n||_|  ||d  qtj	r|
ds|
ds|
ds|
ds|tv std|  qtj	r| D ]\}}td	|  qW d    n1 s0    Y  d S )
Nauthr4   )content_type__app_labelcontent_type__modelZadd_Zview_Zchange_Zdelete_z??? unknown z(!!! not found so not renamed or removed )objectsfilterr   atomiccodenamedeletesavepopr   DEBUG
startswithALL_PERMISSIONSprintrP   )
Permission
RENAME_MAPZall_permissionsr#   Zpre_codenameZnew_codenamekvr   r   r   rename_permissions   s4    

ri   Fc                    s    fdd}t |t jjS )Nc                    s&   |  dd}t|  r"td d S )NrW   re   )	get_modelri   exit)appsZscheme_editorre   rf   dry_runr   r   inner   s    
z*rename_permission_operation.<locals>.inner)r   	RunPythonnoop)rf   ro   rp   r   rn   r   rename_permission_operation   s    rs   N)F)$typingr   django.confr   django.core.cacher   	django.dbr   r   rolepermissions.permissionsr   Zrolepermissions.rolesr   r	   rM   rc   	get_rolesrS   updaterO   keys	frozensetr   r   r   tupler   r   r   rE   r9   rF   rU   rV   ri   rs   r   r   r   r   <module>   s,   

