o
    h!                     @   sL   d dl mZmZ d dlmZ d dlmZmZ d dlm	Z	 G dd de	Z
dS )    )get_permission_codenameget_user_model)Q)GroupPagePermissionPage)OwnershipPermissionPolicyc                       s   e Zd ZdZdZef fdd	Zdd Zdd Zd	d
 Z	dd Z
dd Zd$ddZd$ddZdd Zdd Zdd Z	d$ddZ	d$ddZdd Zd d! Zd"d# Z  ZS )%PagePermissionPolicy_page_permission_cache_explorable_root_page_cachec                    s   t  j|d d S )N)model)super__init__)selfr   	__class__ a/var/www/html/ndineBlogger/venv/lib/python3.10/site-packages/wagtail/permission_policies/pages.pyr      s   zPagePermissionPolicy.__init__c                 C   s2   |j r	|js	|jrtj S tjj|dddS )N)group__userpage
permission)	is_activeis_anonymousis_superuserr   objectsnonefilterselect_relatedr   userr   r   r   get_all_permissions_for_user   s
   
z1PagePermissionPolicy.get_all_permissions_for_userc                 C   s   |j sdS |jr
dS d S )NFT)r   r   r   r   r   r   _base_user_has_permission   s
   z.PagePermissionPolicy._base_user_has_permissionc                 C   s(   |j s	| jj S |jr| jj S d S N)r   r   _default_managerr   r   allr   r   r   r   _base_queryset_for_user   s
   z,PagePermissionPolicy._base_queryset_for_userc                 C   s   |  ||hS r!   )user_has_any_permission)r   r   actionr   r   r   user_has_permission$      z(PagePermissionPolicy.user_has_permissionc                 C   sV   |  |}|d ur|S t|}d|v r|d dd | |D }t| ||@ S )Nchangeaddc                 S   s   h | ]}|j jqS r   )r   codename.0permr   r   r   	<setcomp>1   s    z?PagePermissionPolicy.user_has_any_permission.<locals>.<setcomp>)r    setr*   get_cached_permissions_for_userbool_get_permission_codenames)r   r   actionsbase_permissionpermissionsr   r   r   r%   '   s   

z,PagePermissionPolicy.user_has_any_permissionTc                 C   sn   t |}d|v r|d tjj| |djddd}t|d}|r*|tddO }t j	jdd	|
 S )
Nr)   r*   )permission__codename__ingroupTflat
groups__inr   r   )r0   r*   r   r   r   r3   values_listr   r   r"   distinct)r   r4   include_superusersgroupsqr   r   r   users_with_any_permission7   s"   

z.PagePermissionPolicy.users_with_any_permissionc                 C   s   |  |h|S r!   )rD   )r   r&   rA   r   r   r   users_with_permissionL   r(   z*PagePermissionPolicy.users_with_permissionc                 C   s   |  ||h|S r!   )$user_has_any_permission_for_instance)r   r   r&   instancer   r   r    user_has_permission_for_instanceO   s   z5PagePermissionPolicy.user_has_permission_for_instancec                 C   s   |  |}|d ur|S t }| |D ]0}|j|jks!||jrC||jj	 |jj	t
d| jjkrC|j|jkrC|t
d| jj qt| ||@ S )Nr*   r)   )r    r0   r1   pkpage_idis_descendant_ofr   r*   r   r+   r   r   _metaowner_idr2   r3   )r   r   r4   rG   r5   r6   r.   r   r   r   rF   R   s   
z9PagePermissionPolicy.user_has_any_permission_for_instancec                 C   s   |  |}|d ur|S | jj }| |D ];}|jjtd| jjkr<d|vr<d|v r<|| jjj	|j
ddj|dO }q|jj| |v rQ|| jjj	|j
ddO }q|S )Nr*   r)   T	inclusive)owner)r$   r   r"   r   r1   r   r+   r   rL   descendant_ofr   r   r3   )r   r   r4   base_querysetpagesr.   r   r   r   %instances_user_has_any_permission_ford   s*   



z:PagePermissionPolicy.instances_user_has_any_permission_forc                 C   s   |j dd}tjj| ||djddd}t|d}|r$|tddO }d|v rKd	|vrKtjjtd	| jj	|d
jddd}|t|dt|j
d@ O }t jjdd| S )NTrN   )r7   page__inr8   r9   r;   r=   r)   r*   )permission__codenamerU   )rI   r>   )get_ancestorsr   r   r   r3   r?   r   r   r   rL   rM   r   r"   r@   )r   r4   rG   rA   	ancestorsrB   rC   
add_groupsr   r   r   &users_with_any_permission_for_instancez   s0   
z;PagePermissionPolicy.users_with_any_permission_for_instancec                 C   s   |  |h||S r!   )rZ   )r   r&   rG   rA   r   r   r   "users_with_permission_for_instance   s   z7PagePermissionPolicy.users_with_permission_for_instancec                    s:   |j r
tjjddS | h d  fdd| |D S )N   )depth>   r*   lockr)   unlockpublishbulk_deletec                    s   g | ]}|j j v r|jqS r   )r   r+   r   r,   	codenamesr   r   
<listcomp>   s
    zQPagePermissionPolicy.instances_with_direct_explore_permission.<locals>.<listcomp>)r   r   r   r   r3   r1   r   r   rb   r   (instances_with_direct_explore_permission   s   
z=PagePermissionPolicy.instances_with_direct_explore_permissionc                 C   sd   t || jrt|| jS | |}ztjj|ddd}W n tjy(   d }Y nw t|| j| |S )NT)include_selfstrict)	hasattr$_explorable_root_instance_cache_namegetattrre   r   r   first_common_ancestor_ofDoesNotExistsetattr)r   r   rS   	root_pager   r   r   explorable_root_instance   s   

z-PagePermissionPolicy.explorable_root_instancec                 C   sn   |  |}|d ur|S | |h d}dd | |D }|D ]}|| O }qtj|}|j|jd}|S )N>   r*   r^   r)   r_   r`   ra   c                 S   s   g | ]}|j qS r   )r   r,   r   r   r   rd      s    z=PagePermissionPolicy.explorable_instances.<locals>.<listcomp>)path__startswith)	r$   rT   r1   rW   r   r   rk   r   path)r   r   rR   explorable_pagespage_permissionsr   fca_pager   r   r   explorable_instances   s   
	z)PagePermissionPolicy.explorable_instances)T)__name__
__module____qualname__permission_cache_nameri   r   r   r   r    r$   r'   r%   rD   rE   rH   rF   rT   rZ   r[   re   ro   ru   __classcell__r   r   r   r   r      s*    


"
r   N)django.contrib.authr   r   django.db.modelsr   wagtail.modelsr   r    wagtail.permission_policies.baser   r   r   r   r   r   <module>   s
    