
     h6                     D    d dl  d dlmZ  G d dej                        Zy)    )*)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                  j                          t         j                  j	                  |       dkD  rt        d       t        t         j                  j                  | j                  j                  g       t        | ,  |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   sx    ..0>>D9C? h if55QQY]Y`Y`YfYfXghw|T,V,,    T)	only_once
system_jobc                 B   t         j                  d|         t        j                  j	                  | ddg      }t               }|j                  D ]1  }|j                  s|j                  D ]  }|j                  |        3 t        t        |            }|j                  |k7  r||_        |j                  d       t        j                         }|j                         g dz   }d}d}	t        j                  j                  | |d	g|	|	d
z   g      }
|
rk|
D ]+  }|j                  d       |j                  d       |dz  }- t!                |	d
z  }	t        j                  j                  | |d	g|	|	d
z   g      }
|
rkt         j                  d|  d|        y )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   s    	
XYeXfgh++//<8R8a8c 0 d	 $'5 22 	4D&&00 4A,0034	4 $*$/G*H#I --1II1II.NNTN* >>#--/:: ##+1=M<NW\^cdg^gVh $ j @@t@L		D	)Q SLENN''L/5AQ@R[`bgjmbmZn ( pE  	
I,  XL  MN  LO  P  	Qr   c                    d}t         j                  j                  j                  |d   v ryt         j                  j                  j                  |d   v rd}t         j                  D ]  }||d   v r y|r||d   v sd} |r|d   D ]7  }|j                  d      st         j                  j                  ||      s7 y |sA|d   D ]9  }|j                  d      st         j                  j                  ||      s7d} n |ryy)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   s%   
  >>""&Ef&MM>>""&Ej&QQ"O 55 	'J<VDD"z5TU_5`'`"&		' #B6#J "&112CD>>11*?1[!	"
 #'Fz'R O*556GH ~~55j5_*. r   c                     t         j                  j                          | j                  j	                          | j                  D ]  }|j                           t        |   |i |S )N)r
   r   r   r,   loaddeleter   )r   r	   r   security_level_ruler   s       r   rO   zCmfSecurityLevel.delete^   s]    ..0!!&&(#'#<#< 	)&&(	)w~t.v..r   c                     t        |       } | t        j                  v rt        j                  |    S t        j                  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   sv     12 < <<//0ABB00448I S64 7
 ;I$$%67++,=>>r   c                 2    t        d       t        dd        y )Nz"cmf_security_level::reload triggerCmfSecurityLevel:changed)printcmf_emit_server_event)rF   s    r   r   zCmfSecurityLevel.trigger_reloads   s    238$?r   rY   )channelc                  F    t        d       i t        _        t        d       y )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   s     	01')$/0r   )__name__
__module____qualname__r   staticmethodcmf_deferred_jobr   classmethodrL   rO   rW   r   on_server_eventr^   __classcell__)r   s   @r   r   r      s    - 6&Q 7 &QP " "H/ ? ? @ @ 781 9 1r   r   N)cmf.includecommon.fieldsr   r    r   r   <module>rj      s      ,x1):: x1r   