
    i:                     L    d dl  d dlmZ d dlZ G d dej                        Zy)    )*)cmf_project_perm_schemeNc                        e Zd ZdZddd fd
Z fdZ fdZed        Zed	        Z	e
 ed
      d               Zeddefd       Ze	 	 	 ddefd       Z xZS )CmfProjectPermSchemeNTsystem.open:default)hide_warningsdefault_scheme_codec          
         t         j                  j                          | j                  rt         j                  j	                  |      }g d}t         j
                  j                  ||      D ]M  }t         j                         }| |_        |D ]  }	t        ||	t        ||	              |j                  |       O t        
| (  |i |S )Ncodeproject_permissionaccess_project_roleaccess_membersaccess_local_useraccess_owneraccess_owner_assistantaccess_authoraccess_project_owneraccess_responsibleaccess_sdesk_clientaccess_anonymousaccess_guestaccess_sharelink_anonymousparentfields)r   )modelsr   trigger_reloadis_newgetCmfProjectPermSchemeRulelistr   setattrgetattrsavesuper)selfr   r	   argskwargsdefault_schemerule_fieldsdefault_rulerulefield	__class__s             3./modules/project/models/cmf_project_perm_scheme.pyr&   zCmfProjectPermScheme.save    s    ##224;; $88<<BU<VN9K !' ? ? D DNcn D o 7668"( GED%u)EFG			67 w|T,V,,    c           
      l   | j                   }t        
|   |i |}|rt        j                  j                  d      }g d}t        j                  j                  ||      D ]M  }t        j                         }| |_        |D ]  }	t        ||	t        ||	              |j                  d       O |S )Nr   r   r   r   T)save_import)r    r'   _save_importr   r   r!   r"   r#   r   r$   r%   r&   )r(   r)   r*   r    resr+   r,   r-   r.   r/   r0   s             r1   r5   z!CmfProjectPermScheme._save_import3   s    g"D3F3 $88<<BW<XN9K !' ? ? D DNcn D o ,668"( GED%u)EFG		d	+, 
r2   c                 (   |j                  dd      }|j                  d      sbt        j                  j                  | dg      }|r~dj	                  |D cg c]  }d|j
                   d c}      }t        d| d	       n@t        j                  j                  | ||
      D ]  }d |_        |j                  d        t        j                  j                  | ||      D ]  } |j                  |i |  t        	| (  |i |S c c}w )NTEXKOM_db_deleteFname)project_perm_schemer   z, "u   Невозможно удалить Схему проектных прав, она используется в проектах: T)abort)r:   include_deletedinclude_system)	only_data)r   r=   r>   )r!   r   
CmfProjectr#   joinr9   	cmf_alertr:   r&   r"   deleter'   )
r(   r)   r*   r=   used_projectspused_projects_strprojectr.   r0   s
            r1   rC   zCmfProjectPermScheme.deleteG   s8   

#5u=zz,-"--22tU[T\2]M$(IIm.T166(!}.T$U!  ^  _p  ^q  r  z~  !,,11d\k  }L1  M -,0+t,- 3388Ve  wF8  G 	)DDKK((	)w~t.v.. /Us   Dc                    t        j                          }i i i i i i i i i i i i d}t        j                  j                         }t        j                  j                  d      }i }i }t        j                          }i }t        j                  j                  g d      D ]}  }	|	j                  r|	j                  s|	j                  |vri ||	j                  <   t               }
|	j                  D ]  }|j                  j                  d      r|j                  |vrQt        j                  j                  |j                        }|D cg c]  }|j                   c}||j                  <   ||j                     D ]  }|
j                  |        |
j                  |j                          |
s|	j                  ||	j                     vr$t               ||	j                     |	j                  <   ||	j                     |	j                     j!                  |
        t        j                          |z
  dkD  r-t"        j%                  d	t        j                          |z
          t        j                          }t        j&                  j                  g d
      }t        j                          |z
  dkD  r-t"        j%                  dt        j                          |z
          t        j                          }|D ]  }t               t               i t               t               t               t               t               t               t               t               t               d}i }i }|j                  |v r||j                     }|j(                  |vr:t        j*                  j                  |j(                  g d      ||j(                  <   |j,                  D ]E  }|j                  |vrt               ||j                  <   ||j                     j                  d       G ||j(                     D ]  }|j.                  r(|d   j                  |j0                  j2                         |j4                  r(|d   j                  |j0                  j2                         |j6                  r(|d   j                  |j0                  j2                         |j8                  r(|d   j                  |j0                  j2                         |j:                  r(|d   j                  |j0                  j2                         |j<                  r(|d   j                  |j0                  j2                         |j>                  r(|d   j                  |j0                  j2                         |j@                  r(|d   j                  |j0                  j2                         |jB                  r|jD                  r)|d   j                  |j0                  j2                         n|j0                  j2                  |d   vr$t               |d   |j0                  j2                  <   |j                  |j                  jF                  g       D ]-  }|d   |j0                  j2                     j                  |       / |jH                  r(|d   j                  |j0                  j2                         |jJ                  ru|j                  jF                  |vr!t               ||j                  jF                  <   ||j                  jF                     j                  |j0                  j2                         |jL                  r(|d   j                  |j0                  j2                         |jN                  rW|jP                  |vrt               ||jP                  <   ||jP                     j                  |j0                  j2                         |jR                  rh|jT                  D ]Y  }|j                  |vrt               ||j                  <   ||j                     j                  |j0                  j2                         [ |jV                  rh|jX                  D ]Y  }|j                  |vrt               ||j                  <   ||j                     j                  |j0                  j2                         [ |jZ                  rh|j\                  D ]Y  }|j                  |vrt               ||j                  <   ||j                     j                  |j0                  j2                         [ |j^                  r|j^                  D ]  }|j2                  j                  d      rX|j2                  |vrt               ||j2                  <   ||j2                     j                  |j0                  j2                         v|j                  |vrt               ||j                  <   ||j                     j                  |j0                  j2                          |j`                  s|j`                  D ]^  }|j                  |vr||j                     D ];  }||vrt               ||<   ||   j                  |j0                  j2                         = `  |jc                         D ]   \  }}||vri ||<   |||   |j                  <   " |jc                         D ]  \  }}|||   |j                  <     t        j                          |z
  dkD  r9t"        j%                  dt        j                          |z
   dte        |              |tf        _4        t"        j%                  dt        j                          |z
   d        t        j                          |z
  d!kD  r.t"        j%                  d"t        j                          |z
          y y c c}w )#N)r   access_sdesk_publicaccess_sdesk_privater   r   r   r   access_executorsaccess_spectatorsr   r   access_list_ownerzsdesk-client:defaultr   )	parent_idz
members.idproject_role_idr   zCmfCompany:)companyg{Gz?zXPROF CmfProjectPermScheme.load_project_permission_data() CmfProjectRoleAssign.slist got )project_perm_scheme_idcmf_owner_idzcmf_owner_assistants.idservicedesk_publiczspectators.idzexecutors.idzcmf_project_admins.idzNPROF CmfProjectPermScheme.load_project_permission_data() CmfProject.slist got )zaccess_project_role.idzaccess_members.coder   r   r   r   r   access_project_owner_assistantr   rK   project_permission.coder   r   r   rL   r   rM   access_project_spectatorsaccess_project_executorsr   zPPP-PR-BROWSEr   r   r   r   r   rK   rL   rM   rI   rJ   r   r   zvar:g?zNPROF CmfProjectPermScheme.load_project_permission_data() process projects got z count=zLoad time _PROJECT_PERM_DATA: secg333333?z=PROF CmfProjectPermScheme.load_project_permission_data() got )5timer   CmfPersonGroupguest_groupCmfProjectRoler!   CmfProjectRoleAssignslistmembersrO   rN   setid
startswith	CmfPersonaddupdategdebugr@   rR   r"   cmf_project_adminsr   r   r   r   r   r   r   rK   rL   rM   r   rT   valuer   r   r   r   rS   rU   cmf_owner_assistantsrW   
spectatorsrX   	executorsr   r   itemslenr   _PROJECT_PERM_DATA)cls
start_time	perm_dataguest_person_groupsdesk_client_rolecompany_persons_cacheloaded_scheme_rulesprof_stproject_role_membersr_membersmp_listrE   project_listrG   project_permsproject_user_permsproject_role_member_idspr_adminr.   	member_idmemberroleuser_idpermperm_funs                              r1   load_project_permission_dataz1CmfProjectPermScheme.load_project_permission_dataW   s
   YY[
 "$#%$&&("$ "!# "*,!#
	  $22>>@"1155;Q5R " ))+!,,22:h2i 	RA99A$5$5
 {{"6646$Q[[1uHYY '44??=1tt#88!'!1!1!7!7!7!EEK6Lqtt6L-add321448 ( Q( LL&'   (<Q[[(IIGJu$Q[[1!2C2CD -a.?.?@GGQ3	R4 99; 4'GGnosoxoxoz  ~E  pE  oF  G  H))+((.. 7O. P 99; 4'GGdeienenepszezd{|}))+# b	7G &)U'*u(* #*-%!$&)e$'E%(U$'E.1e%(UM  "$&(#zz11*>wzz*J' --5HHFLFeFeFkFk"998 Gl 	G#G$B$BC $66 E;;&8869e&x{{3"8;;/33ODE
 ,G,J,JK ^\))!"56::4;R;R;W;WX$$!.155d6M6M6R6RS..!":;??@W@W@\@\]%%!/266t7N7N7S7ST**!"67;;D<S<S<X<XY((!"4599$:Q:Q:V:VW))!"56::4;R;R;W;WX))!"56::4;R;R;W;WX++ 11%&;<@@AXAXA]A]^  2277}Mc?ddbebgM*@A$BYBYB^B^_)@)D)DEVEYEYE_E_ac)d oI)*@A$BYBYB^B^_ccdmno ((!"4599$:Q:Q:V:VW$$),,22:LLJM%*+=+@+@+F+FG&'9'<'<'B'BCGGH_H_HdHde22!">?CCDD[D[D`D`a,,++3EECF5*7+?+?@&w';';<@@AXAXA]A]^66")">"> X!99,>><?E.vyy9*699599$:Q:Q:V:VW	X
 11")"4"4 X!99,>><?E.vyy9*699599$:Q:Q:V:VW	X
 00")"3"3 X!99,>><?E.vyy9*699599$:Q:Q:V:VW	X
 && #'"5"5 	\!;;11&9%{{2DDBE% 26;; ?.v{{;??@W@W@\@\]%yy0BB@C 2699 =.vyy9==d>U>U>Z>Z[	\ ++ $ 8 8 \#ww*AA$)@)I \I(0BB@C 29 =.y9==d>U>U>Z>Z[\\q^\d "4!9!9!; 6)+)+Ig&15	'"7::.6
 #0"5"5"7 7$26	(#GJJ/7Cb	7H 99; 3&GGdeienenepszezd{  |C  DG  HT  DU  CV  W  X2;/	0Z1G0HLM99;#c)GGSTXT]T]T_blTlSmno *A 7Ms   o,c                 2    t        d       t        dd        y )Nz"project_permission::reload triggerCmfProjectPermScheme:changed)printcmf_emit_server_event)rq   s    r1   r   z#CmfProjectPermScheme.trigger_reloadE  s    24<dCr2   r   )channelc                  N    d }t        d       dat        j                  |       y )Nc                     t        d       t        j                  d       t        rt        d       dat        j
                  j                         5  t        j                  j                          t        j                  j                  dt        t        j                               dd      r)t         j#                  d	       t$        j'                          d d d        y t        d
       y # 1 sw Y   y xY w)Nz*project_permission::reload handler spawned   z,project_permission::reload handler do reloadFz&project_permission::clear_jscache:lockTi  )nxpxz?project_permission::reload handler do CMF_CACHE.flush_jscache()z'project_permission::reload handler skip)r   rZ   sleep_project_permission_changedcmfappcmf_contextr   r   r   REDIS_DBredisra   strosgetpidrg   rh   	CMF_CACHEflush_jscache r2   r1   handlerzBCmfProjectPermScheme.on_project_permission_change.<locals>.handlerO  s    >@JJqM*DF.3+WW((* 2//LLN~~))*RTWXZXaXaXcTdimrw)x"ac!//12 2 ?A2 2s   BC--C6z(project_permission::reload spawn handlerT)r   r   geventspawn)_kwargsr   s     r1   on_project_permission_changez1CmfProjectPermScheme.on_project_permission_changeJ  s%    
	B  	8:&*#Wr2   r   c                    |t         j                  }|j                  j                          t        j
                  j                  dd|j                  gdd|ggg d      }|sy|j                  r|j                  ry|j                  r|t         j                  k(  ry|j                  r||j                  k(  ry|j                  s$|j                  s|j                  s|j                   r|st#        d| d       |rp|j                  r||j                  k(  ry|j                  r||j$                  k(  ry|j                  r||j&                  k(  ry|j                   r||j(                  k(  ry|j*                  r||j*                  j-                         v ry|j.                  rYt        j0                  j3                  dd|gd	d
|j.                  ggdg      }|D ]   }||j4                  j-                         v s  y |syt        j6                  j                  |dg      }	t9        d|	j:                   d|j:                   d|       )Nr   =rV   )r   r   r   r   r   r   r   r   )filterr   Tu*   DEV: check_project_role_access Право u_    разрешено для объектного поля, но объект не переданproject_roleINr`   Fr9   r   r   N   У пользователя нет Проектного разрешения "   " в проекте     для объекта )rg   current_userr:   loadr   r"   r!   r   
user_localr   anonymous_userr   	cmf_ownerr   r   r   r   rB   cmf_owner_assistant
cmf_authorresponsibler   
all_nestedr   r^   r#   r`   CmfProjectPermPermissionCmfPermissionErrorr9   )
rq   rG   r   userobjraise_errorr   role_assignsrole_assign	perm_infos
             r1   check_project_role_access_oldz2CmfProjectPermScheme.check_project_role_access_oldc  sm    <>>D 	##((*..22Hc7KfKf;g<UWZ\n;o;q5c 3 d  !!doo  TQ-=-=%=$$w(((  ; ;t?Q?QUYUlUlFGYFZ  [z  {  |  3==(**3222!!3>>)&&3??*t**5577##!66;;XsT[D\>LdTXTlTl=mDoENK < QL  ,  ;..99;;  3377=OY_X`7a	 #qr{  sA  sA  rB B77>||nD[\_[`"b c 	cr2   c
                    t         j                  st         j                  ry|!t         j                  }t         j                  }
n!t
        j                  j                  |d      }
|s|rt        j                  |dg      }t        |t        j                  j                        r|j                  }|r8|s6t        |t        j                  j                        r|j                  }|}|}n2|j                  dk(  rt!        |j"                        }n|j$                  j&                  r|j(                  j&                  s|j+                  ddg       |j$                  j                  r\|j$                  j,                  r/|j$                  j.                  r|s|j$                  j.                  }nr|j$                  j                  }n[|j(                  j,                  r/|j(                  j.                  r|s|j(                  j.                  }n|j(                  j                  }|| j0                  d   vrt         j3                  d	| d
|        y|j4                  r|| j0                  d   |   v ry|j"                  j                  | j0                  v rN|| j0                  |j"                  j                     v r)|| j0                  |j"                  j                     |   v ry|
D ]9  }|| j0                  v s|| j0                  |   v s$|| j0                  |   |   v s9 y |t         j6                  k(  r|| j0                  d   |   v ry|rt        |t               s|t         j8                  k(  r(|| j0                  d   |   v rt         j:                  |k(  ry|| j0                  d   |   v rL|j<                  j,                  r&|j>                  s||j<                  j.                  k(  ry||j<                  k(  ry|| j0                  d   |   v rf|j@                  jC                          |j@                  j,                  r&|j>                  s||j@                  j.                  k(  ry||j@                  k(  ry|| j0                  d   |   v rftE        |d      rZ|jF                  jC                          |jF                  j,                  r||jF                  j.                  k(  ry||jF                  k(  ry|| j0                  d   |   v rztE        |d      rn|jH                  jC                          |jH                  j,                  r/|jH                  j.                  r(||jH                  j.                  v ry||jH                  v ry|| j0                  d   |   v r9tE        |d      r,|jJ                  jC                          |jJ                  j,                  r/|jJ                  j.                  r(||jJ                  j.                  v ry||jJ                  v ry|jJ                  j,                  rd|jJ                  j.                  rtM        |
      tM        |jJ                  j.                  D cg c]  }|j"                  j                   c}      z  rEytM        |
      tM        |jJ                  D cg c]  }|j"                  j                   c}      z  ry|| j0                  d   |   v rtE        |d      r|jN                  }|jN                  j,                  r|jN                  j.                  }|D ]j  }||j<                  k(  s||jH                  v r y|
D ]D  }||j<                  j"                  k(  s'||jH                  D cg c]  }|j"                   c}v sC  y l || j0                  d   |   v r9tE        |d      r,|jP                  jC                          |jP                  j,                  r/|jP                  j.                  r(||jP                  j.                  v ry||jP                  v ry|jP                  j,                  rd|jP                  j.                  rtM        |
      tM        |jP                  j.                  D cg c]  }|j"                  j                   c}      z  rEytM        |
      tM        |jP                  D cg c]  }|j"                  j                   c}      z  rydD ]u  }|| j0                  v s|| j0                  |   v s$|| j0                  |   |   v s9|jS                  |      }||v r y|
D ]!  }||D cg c]  }|j"                   c}v s   y w nH|rEtM               }|| j0                  d   |   v r!|jU                  |jW                  dd              || j0                  d   |   v r!|jU                  |jW                  dd              || j0                  d   |   v r!|jU                  |jW                  dd              || j0                  d   |   v r+|jW                  dg       D ]  }|jU                  |d           || j0                  d   |   v r+|jW                  dg       D ]  }|jU                  |d           |j"                  |v rytM        |
      |z  ry|| j0                  d   |   v r |jX                  rt         jZ                  dk(  ry|| j0                  d    |   v rs|j"                  j                  | j0                  d    |   |   v rt         jZ                  dk(  ry|
D ]/  }|| j0                  d    |   |   v st         jZ                  dk(  s/ y |	sy!d"}|r,t
        j\                  jW                  |d#g$      j^                  }t
        j`                  jW                  |d#g%      }tc        d&|j^                   d'| d(|       c c}w c c}w c c}w c c}w c c}w c c}w ))NT)id_onlyr   rP   r@   
project_idrN   r   uX   Пропустили проверку Проектных прав для объекта u3   , т.к. проект еще не загружен r   r   r   r   r   r   r   rk   rK   rm   rM   listsrL   rl   )zvar:responsiblezvar:executorszvar:spectatorsz	var:ownerzvar:owner_assistantszvar:project_ownerzvar:project_owner_assistantsz
var:authorzvar:waiting_forzvar:component_ownerzvar:current_userzvar:all_related_userszvar:followersu   var:Подпискиzvar:project_userszvar:approversrS   cmf_author_idresponsible_idrb   rI   sd_apirJ   F r9   )rb   r   r   r   r   r   )2rg   disable_permissionsacl_admin_moder   current_person__member_ofr   CmfAccessListsubject_full_group_listcmfutilget_obj_by_id
isinstancer   r   CmfTyperj   
class_namer   rb   r   
is_definedrN   load_fields
is_changedoldrp   rh   r   r   sharelink_anonymous_usersharelink_access_objr   r    r   r   hasattrr   rk   rm   ra   r   rl   extract_var_objre   r!   servicedesk_allow	api_scoper@   r9   r   r   )rq   rG   r   r   r   obj_idproject_id_simplecheckobj_dict_simplecheckuse_new_projectr   r   obj_parent_idcontainer_ider   lxvar_user_code	var_userssimple_check_allowed_iditmp_project_namer   s                          r1   check_project_role_accessz.CmfProjectPermScheme.check_project_role_access  s
      A$4$4<>>D()(C(C%(.(<(<(T(TUYcg(T(h%v''}'EC c3::--.))C!#0#**2D2DE)?)E)E&2M(C~~- #CFF ~~008P8POO\;$?@>>''~~00S^^5G5GP_(+(:(:(+(<(<}}//CMM4E4Eo(+(9(9(+(;(;  6 6~ FFGGjknjo  pc  dq  cr  st ??"c&<&<=P&QR_&`` 77==C222 6 6tww}} EE%)?)?)N})]]5 	$Ls555 C$:$:<$HH)S-C-CL-QR_-``#		$ 1###(:c>T>TUg>hiv>w(w%ZS-Aq111*c.D.DEa.bcp.qq))S0!S%;%;N%KM%ZZ==++CJJs}}000#s}},#!S%;%;O%L]%[[##%>>,,SZZs~~111#s~~-#!S%;%;<P%QR_%``elmpr  fA$$&??--s222#s.#!S%;%;<T%UVc%ddipqt  wM  jN((--/++66//33@X@X@\@\8\#s777#!S%;%;<N%OP]%^^cjknp{c|""$==++}}((TS]]5F5F-F#s}},#==++}}((S1J-KcgjgtgtgxgxRybcSTSWSWS]S]RyNz-z#45QTQ^Q^<_AQTTZZ<_8``#!S%;%;<O%PQ^%__dkloqxdy 		99''IIMME (Aq{{*da6L6L.L#(A ('1;;>>9\\]\r\rMsWXaddMs=s#'(( "S%;%;<O%PQ^%__dkloq}d~##%>>,,~~))dcnn6H6H.H#s~~-#>>,,~~))c2K.LshkhvhvhzhzS{cdTUTXTXT^T^S{O|.|#45QTQ_Q_<`AQTTZZ<`8aa#"` 0
 !C$:$::$(>(>}(MM-1G1G1VWd1ee(+(;(;M(JI#y0'+0I 0#/)3LQADD3L#L+/00 " '*e#!S%;%;N%KM%ZZ'++,@,D,D^UY,Z[!S%;%;O%L]%[['++,@,D,D_VZ,[\!S%;%;<P%QR_%``'++,@,D,DEUW[,\] "S%;%;<N%OP]%^^-11+rB 9A+//$89!S%;%;<O%PQ^%__-11,C 9A+//$89ww11,-0GG !7!78M!N}!]]%%!++*A !7!78N!OP]!^^ww}} 6 67M N} ]^p qq;;(* 9 $3#9#9:P#QR_#`as#tt{{h.#$ %0044vh4W\\3377=OY_X`7a	 #qr{  sA  sA  rB B77G6HH_`c_d"f g 	gc Sz =` Nt T| =a& 4Ms$   o
o
)o
*o
.o
1o 
)NNT)NNNNNFT)__name__
__module____qualname__rp   r&   r5   rC   classmethodr   r   staticmethodon_server_eventr   r   r   r   __classcell__)r0   s   @r1   r   r      s    2 )-BW -&(/  kp kpZ D D ;< = . Fcs Fc FcP eijo.2xgC xg xgr2   r   )cmf.includemodules.project.fieldsr   rZ   r   r   r2   r1   <module>r      s%     : _
g2GG _
gr2   