U
    -h                     @   s   d dl mZ d dlmZ d dlmZmZmZmZ d dl	m	Z	 d dl
mZ G dd deeZG dd	 d	eeZG d
d deZdS )    )Document)Field)OptionalDictAnyList)datetime)Enumc                   @   s    e Zd ZdZdZdZdZdZdS )PermissionTypereadwritedeleteadminexecuteN)__name__
__module____qualname__READWRITEDELETEADMINZEXECUTE r   r   H/var/www/html/Mana-Pige/backend/account-service/app/models/permission.pyr
      s
   r
   c                   @   s(   e Zd ZdZdZdZdZdZdZdZ	dS )	ResourceTypeuserprofilepostcommentsystemZ	analyticssettingsN)
r   r   r   USERPROFILEPOSTCOMMENTSYSTEM	ANALYTICSSETTINGSr   r   r   r   r      s   r   c                   @   sN  e Zd ZU eddddZeed< eed< dZee ed< e	ed	< e
ed
< dZee ed< eedZeeef ed< dZee ed< eedZee ed< dZeed< dZeed< eejdZeed< eejdZeed< dZee ed< G dd dZG dd dZedd Zd%eeeedddZ ed  d d!d"Z!ed  d d#d$Z"dS )&
Permission.   d   )
min_length
max_lengthnamedisplay_nameNdescriptionresource_typepermission_typescope)default_factory
conditionsparent_permissionchild_permissionsT	is_activeFis_system_permission
created_at
updated_at
created_byc                   @   s   e Zd ZdZdS )zPermission.ConfigTN)r   r   r   arbitrary_types_allowedr   r   r   r   Config2   s   r<   c                   @   s    e Zd ZdZddddddgZdS )	zPermission.Settingspermissionsr,   r/   r0   r6   r7   r8   N)r   r   r   r,   indexesr   r   r   r   Settings5   s   r?   c                    sD  dddt jtjdddddt jtjddd	d
dt jtjdddddt jtjdddddt jtjddddddt jtjddddddt jtjddddddt jtjdddddd t jtjddd!d"d#t j	tjddd$d%d&t j	tjddd'd(d)t j
tjddg}|D ]>}| | j|d* kI d+H }|s | f |}| I d+H  q d+S ),z!Create default system permissionsz	user.readz
Read UserszView user informationT)r,   r-   r.   r/   r0   r7   z
user.writezWrite UserszCreate and update userszuser.deletezDelete UserszDelete user accountsz
user.adminz
User AdminzFull user management accesszprofile.read.ownzRead Own ProfilezView own profile informationZown)r,   r-   r.   r/   r0   r1   r7   zprofile.read.allzRead All ProfileszView all user profilesallzprofile.write.ownzEdit Own ProfilezUpdate own profile informationzprofile.write.allzEdit All ProfileszUpdate any user profilezsystem.adminzSystem AdministratorzFull system accesszsystem.settings.readzRead System SettingszView system configurationzsystem.settings.writezWrite System SettingszModify system configurationzanalytics.readzRead Analyticsz!View system analytics and reportsr,   N)r   r    r
   r   r   r   r   r!   r$   r&   r%   find_oner,   save)clsZsystem_permissionsZ	perm_dataexisting
permissionr   r   r   create_system_permissions@   s    			


		n
z$Permission.create_system_permissions)resourceactionr1   returnc                 C   s8   | j j|ks| jj|krdS |r4| jr4| j|kr4dS dS )z6Check if this permission matches a resource and actionFT)r/   valuer0   r1   )selfrG   rH   r1   r   r   r   matches_resource_action   s
    z"Permission.matches_resource_action)rI   c                    s0   | j s
g S tdd| j iitjdk I dH S )zGet all child permissionsr,   z$inTN)r5   r'   findr6   to_listrK   r   r   r   get_child_permissions   s    z Permission.get_child_permissionsc                    s"   | j s
dS ttj| j kI dH S )zGet parent permission if existsN)r4   r'   rA   r,   rO   r   r   r   get_parent_permission   s    z Permission.get_parent_permission)N)#r   r   r   r   r,   str__annotations__r.   r   r   r
   r1   dictr3   r   r   r4   listr5   r   r6   boolr7   r   utcnowr8   r9   r:   r<   r?   classmethodrF   rL   rP   rQ   r   r   r   r   r'      s*   

v
r'   N)beanier   pydanticr   typingr   r   r   r   r   enumr	   rR   r
   r   r'   r   r   r   r   <module>   s   	