
    ziǠ                     X    d dl  d dlmZ d dlZd dlmZ  G d dej                        Zy)    )*)cmf_project_perm_schemeN)make_prof_pointc                        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/   r0   r1   s             r2   r6   z!CmfProjectPermScheme._save_import5   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	+, 
r3   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$   joinr:   	cmf_alertr;   r'   r#   deleter(   )
r)   r*   r+   r>   used_projectspused_projects_strprojectr/   r1   s
            r2   rD   zCmfProjectPermScheme.deleteI   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        dd      }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 ]  }|j0                  r(|d   j!                  |j2                  j4                         |j6                  r(|d   j!                  |j2                  j4                         |j8                  r(|d   j!                  |j2                  j4                         |j:                  r(|d   j!                  |j2                  j4                         |j<                  r(|d   j!                  |j2                  j4                         |j>                  r(|d   j!                  |j2                  j4                         |j@                  r(|d   j!                  |j2                  j4                         |jB                  r(|d   j!                  |j2                  j4                         |jD                  r|jF                  r)|d   j!                  |j2                  j4                         n|j2                  j4                  |d   vr$t               |d   |j2                  j4                  <   |j                  |j                  jH                  g       D ]-  }|d   |j2                  j4                     j!                  |       / |jJ                  r(|d   j!                  |j2                  j4                         |jL                  ru|j                  jH                  |vr!t               ||j                  jH                  <   ||j                  jH                     j!                  |j2                  j4                         |jN                  r(|d   j!                  |j2                  j4                         |jP                  rW|jR                  |vrt               ||jR                  <   ||jR                     j!                  |j2                  j4                         |jT                  rh|jV                  D ]Y  }|j                  |vrt               ||j                  <   ||j                     j!                  |j2                  j4                         [ |jX                  rh|jZ                  D ]Y  }|j                  |vrt               ||j                  <   ||j                     j!                  |j2                  j4                         [ |j\                  rh|j^                  D ]Y  }|j                  |vrt               ||j                  <   ||j                     j!                  |j2                  j4                         [ |j`                  r|j`                  D ]  }|j4                  j                  d      rX|j4                  |vrt               ||j4                  <   ||j4                     j!                  |j2                  j4                         v|j                  |vrt               ||j                  <   ||j                     j!                  |j2                  j4                          |jb                  s|jb                  D ]^  }|j                  |vr||j                     D ];  }||vrt               ||<   ||   j!                  |j2                  j4                         = `  |je                         D ]   \  }}||vri ||<   |||   |j                  <   " |je                         D ]  \  }}|||   |j                  <     t        j                         |z
  dkD  r9t$        j'                  dt        j                         |z
   d tg        |              |th        _5        t$        j'                  d!t        j                         |z
   d"       t        j                         |z
  d#kD  r-t$        j'                  d$t        j                         |z
           |        y c c}w )%Nload_project_permission_datai,  )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   rM   project_permission.coder   r   r   rN   r   rO   access_project_spectatorsaccess_project_executorsr   zPPP-PR-BROWSEr   r   r   r   r   rM   rN   rO   rK   rL   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 )6r   timer   CmfPersonGroupguest_groupCmfProjectRoler"   CmfProjectRoleAssignslistmembersrQ   rP   setid
startswith	CmfPersonaddupdategdebugrA   rT   r#   cmf_project_adminsr   r   r   r   r   r   r   rM   rN   rO   r   rV   valuer   r   r   r   rU   rW   cmf_owner_assistantsrY   
spectatorsrZ   	executorsr   r   itemslenr   _PROJECT_PERM_DATA)cls
prof_point
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_listrF   project_listrH   project_permsproject_user_permsproject_role_member_idspr_adminr/   	member_idmemberroleuser_idpermperm_funs                               r2   rJ   z1CmfProjectPermScheme.load_project_permission_dataY   s
   $%CSI
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E 7Ms   o>c                 2    t        d       t        dd        y )Nz"project_permission::reload triggerCmfProjectPermScheme:changed)printcmf_emit_server_event)rs   s    r2   r    z#CmfProjectPermScheme.trigger_reloadI  s    24<dCr3   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   r\   sleep_project_permission_changedcmfappcmf_contextr   r   rJ   REDIS_DBredisrc   strosgetpidri   rj   	CMF_CACHEflush_jscache r3   r2   handlerzBCmfProjectPermScheme.on_project_permission_change.<locals>.handlerS  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     r2   on_project_permission_changez1CmfProjectPermScheme.on_project_permission_changeN  s%    
	B  	8:&*#Wr3   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   =rX   )r   r   r   r   r   r   r   r   )filterr   Tu*   DEV: check_project_role_access Право u_    разрешено для объектного поля, но объект не переданproject_roleINrb   Fr:   r   r   N   У пользователя нет Проектного разрешения "   " в проекте     для объекта )ri   current_userr;   loadr   r#   r"   r   
user_localr   anonymous_userr   	cmf_ownerr   r   r   r   rC   cmf_owner_assistant
cmf_authorresponsibler   
all_nestedr   r`   r$   rb   CmfProjectPermPermissionCmfPermissionErrorr:   )
rs   rH   r   userobjraise_errorr   role_assignsrole_assign	perm_infos
             r2   check_project_role_access_oldz2CmfProjectPermScheme.check_project_role_access_oldg  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r3   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   rR   rA   
project_idrP   r   uX   Пропустили проверку Проектных прав для объекта u3   , т.к. проект еще не загружен r   r   r   r   r   r   r   rm   rM   ro   rO   listsrN   rn   )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:approversrU   cmf_author_idresponsible_idrd   rK   sd_apirL   F r:   )rd   r   r   r   r   r   )2ri   disable_permissionsacl_admin_moder   current_person__member_ofr   CmfAccessListsubject_full_group_listcmfutilget_obj_by_id
isinstancer   r   CmfTyperl   
class_namer   rd   r   
is_definedrP   load_fields
is_changedoldrr   rj   r   r   sharelink_anonymous_usersharelink_access_objr   r!   r   r   hasattrr   rm   ro   rc   r   rn   extract_var_objrg   r"   servicedesk_allow	api_scoperA   r:   r   r   )rs   rH   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                          r2   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__rr   r'   r6   rD   classmethodrJ   r    staticmethodon_server_eventr   r   r   r   __classcell__)r1   s   @r2   r   r      s    2 )-BW -&(/  m m^ D D ;< = . Fcs Fc FcP eijo.2xgC xg xgr3   r   )cmf.includemodules.project.fieldsr   r\   cmf.util.cmfutilr   r   r   r3   r2   <module>r      s(     :  ,a
g2GG a
gr3   