
    Uhc                     @    d dl T d dlmZ  G d dej                  ZdS )    )*)cmf_security_levelc                   z     e Zd Z fdZe edd          d                         Zed             Z fdZ	 xZ
S )CmfSecurityLevelc                     t           j                            |           dk    rt          d           t	          t           j        j        | j        j        g            t                      j
        |i |S )N)perm_security_leveli  u   Применение изменений потребует некоторого времени. Время зависит от количества объектов, использующих данный Уровень безопасности.)args)modelsCmfTaskcount	cmf_alertschedule_deferred_jobr   recalc_security_level_cacheidvaluesupersave)selfr	   kwargs	__class__s      %./common/models/cmf_security_level.pyr   zCmfSecurityLevel.save   sz    >D99C?? h i i if5QY]Y`YfXghhhhuww|T,V,,,    T)	only_once
system_jobc                 t   t                               d|             t          j                            | ddg          }t                      }|j        D ](}|j        r|j        D ]}|                    |           )t          t          |                    }|j        |k    r||_        |                    d           t                                          }|                                g dz   }d}d}	t          j        
                    | |d	g|	|	d
z   g          }
|
rt|
D ]3}|                    d           |                    d           |dz  }4t!                       |	d
z  }	t          j        
                    | |d	g|	|	d
z   g          }
|
tt                               d|  d|            d S )NuF   Запуск пересчета Уровня безопасности access_task_fields_cachez'security_level_rules.access_task_fields)r   fieldsT)	only_data)z;perm_security_level.security_level_rules.access_member.codez;perm_security_level.security_level_rules.access_task_fieldsz8perm_security_level.security_level_rules.access_readonlyzproject.cmf_ownerzproject.cmf_owner_assistantsr   cmf_created_atd   )r   r   order_byslice)force   u7   Пересчет Уровня безопасности u4    завершен. Обработано задач: )gdebugr
   r   getsetsecurity_level_rulesaccess_task_fieldsaddsortedlistr   r   r   save_preload_fields+_calc_perm_security_level_allowed_ids_cachecommit_with_event)sec_level_id_kwargs	sec_levelr   ruleftmp_taskr   ir"   batchtasks               r   r   z,CmfSecurityLevel.recalc_security_level_cache   sP    	
gYegghhh+//<8R8a8c 0 d d	 $'55 2 	4 	4D& 40 4 4A,003333#)$/G*H*H#I#I -1III1II.NNTN*** >>##--//: : :: ##+1=M<NW\^cdg^gVh $ j j 	p  @@t@LLL		D	)))QSLEN''L/5AQ@R[`bgjmbmZn ( p pE  	p 	
  P,  P  P  MN  P  P  	Q  	Q  	Q  	Q  	Qr   c                    d}t           j        j        j        |d         v rdS t           j        j        j        |d         v rd}t           j        D ]}||d         v r dS |s||d         v rd}|r|d         D ]<}|                    d          st           j                            ||          r dS =|sF|d         D ]=}|                    d          st           j                            ||          rd} n>|rdS dS )NFfullreadonlyTzCmfProjectRole:)projectrole)r%   current_userr   r   current_person__member_of
startswithin_project_role)clsperm_security_level_allowed_ids
project_idreadonly_access
member_objproject_role_ids         r   check_perm_security_levelz*CmfSecurityLevel.check_perm_security_level8   sg   
  >"&Ef&MMM6>"&Ej&QQQ"O 5 	' 	'J<VDDDvv" 'z5TU_5`'`'`"&  	#B6#J " "&112CDD >11*?1[[ "!66"" 'Fz'R  O*556GHH ! ~55j5__ *.  	:ur   c                     | j                                          | j         D ]}|                                  t                      j        |i |S )N)r)   loaddeleter   )r   r	   r   security_level_ruler   s       r   rL   zCmfSecurityLevel.delete]   s[    !&&(((#'#< 	) 	)&&((((uww~t.v...r   )__name__
__module____qualname__r   staticmethodcmf_deferred_jobr   classmethodrI   rL   __classcell__)r   s   @r   r   r      s        - - - - - 666&Q &Q 76 \&QP " " ["H/ / / / / / / / /r   r   N)cmf.includecommon.fieldsr   r    r   r   <module>rX      se        , , , , , ,\/ \/ \/ \/ \/): \/ \/ \/ \/ \/r   