
    fi6                     @    d dl T d dlmZ  G d dej                  ZdS )    )*)cmf_security_levelc                        e Zd Z fdZe edd          d                         Zed             Z fdZ	ed             Z
ed             Ze ed	
          d                         Z xZS )CmfSecurityLevelc                 .   t           j                                         t           j                            |           dk    rt          d           t          t           j        j        | j        j	        g            t                      j        |i |S )N)perm_security_leveli  u   Применение изменений потребует некоторого времени. Время зависит от количества объектов, использующих данный Уровень безопасности.)args)modelsr   trigger_reloadCmfTaskcount	cmf_alertschedule_deferred_jobrecalc_security_level_cacheidvaluesupersave)selfr	   kwargs	__class__s      %./common/models/cmf_security_level.pyr   zCmfSecurityLevel.save   s    ..000>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_cache'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_level9   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                     t           j                                         | j                                         | j        D ]}|                                  t                      j        |i |S )N)r
   r   r   r,   loaddeleter   )r   r	   r   security_level_ruler   s       r   rO   zCmfSecurityLevel.delete^   sp    ..000!&&(((#'#< 	) 	)&&((((uww~t.v...r   c                     t          |           } | t          j        v rt          j        |          S t          j                            | g d          }|t          j        | <   t          j        |          S )N)z'security_level_rules.access_member.coder   z$security_level_rules.access_readonlyr   r   )strAPPcache_cmf_security_levelr
   r   r*   )security_level_idsecurity_levels     r   get_cache_security_levelz)CmfSecurityLevel.get_cache_security_levele   s~     122 <<</0ABB0448I S6 S6 S64 7 7
 ;I$%67+,=>>r   c                 D    t          d           t          dd            d S )Nz"cmf_security_level::reload triggerCmfSecurityLevel:changed)printcmf_emit_server_event)rF   s    r   r   zCmfSecurityLevel.trigger_reloads   s(    23338$?????r   rY   )channelc                  Z    t          d           i t          _        t          d           d S )Nz cmf_security_level::reload STARTzcmf_security_level::reload DONE)rZ   rS   rT   )r5   s    r   on_project_notify_scheme_changez0CmfSecurityLevel.on_project_notify_scheme_changex   s0     	0111')$/00000r   )__name__
__module____qualname__r   staticmethodcmf_deferred_jobr   classmethodrL   rO   rW   r   on_server_eventr^   __classcell__)r   s   @r   r   r      s       - - - - - 666&Q &Q 76 \&QP " " ["H/ / / / / ? ? \? @ @ [@ _78881 1 98 \1 1 1 1 1r   r   N)cmf.includecommon.fieldsr   r    r   r   <module>rj      se        , , , , , ,x1 x1 x1 x1 x1): x1 x1 x1 x1 x1r   