diff options
Diffstat (limited to 'frontends/php/include/users.inc.php')
| -rw-r--r-- | frontends/php/include/users.inc.php | 377 |
1 files changed, 329 insertions, 48 deletions
diff --git a/frontends/php/include/users.inc.php b/frontends/php/include/users.inc.php index af84528d..4c2e8ae1 100644 --- a/frontends/php/include/users.inc.php +++ b/frontends/php/include/users.inc.php @@ -33,7 +33,7 @@ # Add User definition - function add_user($name,$surname,$alias,$passwd,$url,$autologout,$lang,$refresh,$user_type,$status,$user_groups,$user_medias) + function add_user($name,$surname,$alias,$passwd,$url,$autologout,$lang,$refresh,$user_type,$user_groups,$user_medias) { global $USER_DETAILS; @@ -54,8 +54,6 @@ ' values ('.$userid.','.zbx_dbstr($name).','.zbx_dbstr($surname).','.zbx_dbstr($alias).','. zbx_dbstr(md5($passwd)).','.zbx_dbstr($url).','.$autologout.','.zbx_dbstr($lang).','.$refresh.','.$user_type.')'); - $result &= change_user_status($userid,$status); - if($result) { DBexecute('delete from users_groups where userid='.$userid); @@ -88,7 +86,7 @@ # Update User definition - function update_user($userid,$name,$surname,$alias,$passwd, $url,$autologout,$lang,$refresh,$user_type,$status,$user_groups,$user_medias) + function update_user($userid,$name,$surname,$alias,$passwd, $url,$autologout,$lang,$refresh,$user_type,$user_groups,$user_medias) { if(DBfetch(DBselect("select * from users where alias=".zbx_dbstr($alias). " and userid<>$userid and ".DBin_node('userid', get_current_nodeid(false))))) @@ -102,8 +100,6 @@ ",url=".zbx_dbstr($url).","."autologout=$autologout,lang=".zbx_dbstr($lang).",refresh=$refresh,". "type=$user_type". " where userid=$userid"); - - $result &= change_user_status($userid,$status); if($result) { @@ -182,33 +178,86 @@ } - function get_user_by_userid($userid){ + function get_user_by_userid($userid){ if($row = DBfetch(DBselect('select * from users where userid='.zbx_dbstr($userid)))){ return $row; } /* error("No user with id [$userid]"); */ return false; } + - function change_user_status($userid,$status){ - global $USER_DETAILS; - $res = false; - if((bccomp($USER_DETAILS['userid'],$userid) == 0) && ($status==USER_STATUS_DISABLED)){ - error(S_USER_CANNOT_DISABLE_ITSELF); + function get_userid_by_usrgrpid($usrgrpid){ + $userids = array(); + if($res=DBselect('SELECT DISTINCT u.userid '. + ' FROM users u,users_groups ug '. + ' WHERE u.userid=ug.userid '. + ' AND ug.usrgrpid='.$usrgrpid. + ' AND '.DBin_node('ug.usrgrpid', get_current_nodeid(false)))) + { + while($rows = DBFetch($res)) $userids[]=$rows['userid']; + } + + return $userids; + } + + + function add_user_to_group($userid,$usrgrpid){ + $result = false; + if(granted2move_user($userid,$usrgrpid)){ + DBexecute('delete from users_groups where userid='.$userid.' and usrgrpid='.$usrgrpid); + + $users_groups_id = get_dbid("users_groups","id"); + $result = DBexecute('insert into users_groups (id,usrgrpid,userid) values('.$users_groups_id.','.$usrgrpid.','.$userid.')'); } else{ - $res = DBexecute('UPDATE users SET status='.$status.' WHERE userid='.zbx_dbstr($userid)); + error(S_USER_CANNOT_CHANGE_STATUS); } - return $res; + return $result; + } + + function remove_user_from_group($userid,$usrgrpid){ + $result = false; + if(granted2move_user($userid,$usrgrpid)){ + $result = DBexecute('delete from users_groups where userid='.$userid.' and usrgrpid='.$usrgrpid); + } + else{ + error(S_USER_CANNOT_CHANGE_STATUS); + } + return $result; + } + + +// description: +// checks if user is adding himself to disabled group + function granted2update_group($usrgrpid){ + global $USER_DETAILS; + $users = get_userid_by_usrgrpid($usrgrpid); + $result=(!uint_in_array($USER_DETAILS['userid'],$users)); + return $result; } + + +// description: +// checks if user is adding himself to disabled group + function granted2move_user($userid,$usrgrpid){ + global $USER_DETAILS; + + $result = true; + $group = get_group_by_usrgrpid($usrgrpid); + if(($group['gui_access'] == GROUP_GUI_ACCESS_DISABLED) || ($group['users_status'] == GROUP_STATUS_DISABLED)){ + $result=(bccomp($USER_DETAILS['userid'],$userid)!=0); + } + return $result; + } /************************** USER GROUPS **************************/ - function add_user_group($name,$users=array(),$rights=array()) - { + function add_user_group($name,$users_status,$gui_access,$users=array(),$rights=array()){ + if(DBfetch(DBselect('select * from usrgrp where name='.zbx_dbstr($name).' and '.DBin_node('usrgrpid', get_current_nodeid(false))))) { error("Group '$name' already exists"); @@ -219,29 +268,33 @@ $result=DBexecute("insert into usrgrp (usrgrpid,name) values ($usrgrpid,".zbx_dbstr($name).")"); if(!$result) return $result; - - $result=DBexecute("delete from users_groups where usrgrpid=".$usrgrpid); - foreach($users as $userid => $name) - { - $id = get_dbid('users_groups','id'); - $result=DBexecute('insert into users_groups (id,usrgrpid,userid) values ('.$id.','.$usrgrpid.','.$userid.')'); + +// must come before adding user to group + $result&=change_group_status($usrgrpid,$users_status); + $result&=change_group_gui_access($usrgrpid,$gui_access); + if(!$result) return $result; +//-------- + + foreach($users as $userid => $name){ + $result &= add_user_to_group($userid,$usrgrpid); if(!$result) return $result; } $result=DBexecute("delete from rights where groupid=".$usrgrpid); - foreach($rights as $right) - { + foreach($rights as $right){ $id = get_dbid('rights','rightid'); $result=DBexecute('insert into rights (rightid,groupid,type,permission,id)'. ' values ('.$id.','.$usrgrpid.','.$right['type'].','.$right['permission'].','.$right['id'].')'); + if(!$result) return $result; } - + return $result; } - function update_user_group($usrgrpid,$name,$users=array(),$rights=array()) - { + function update_user_group($usrgrpid,$name,$users_status,$gui_access,$users=array(),$rights=array()){ + global $USER_DETAILS; + if(DBfetch(DBselect('select * from usrgrp where name='.zbx_dbstr($name). ' and usrgrpid<>'.$usrgrpid.' and '.DBin_node('usrgrpid', get_current_nodeid(false))))) { @@ -250,33 +303,43 @@ } $result=DBexecute("update usrgrp set name=".zbx_dbstr($name)." where usrgrpid=$usrgrpid"); - if(!$result) - { - return $result; - } + if(!$result) return $result; + +// must come before adding user to group + $result&=change_group_status($usrgrpid,$users_status); + $result&=change_group_gui_access($usrgrpid,$gui_access); + if(!$result) return $result; +//------- - $result=DBexecute("delete from users_groups where usrgrpid=".$usrgrpid); - foreach($users as $userid => $name) - { - $id = get_dbid('users_groups','id'); - $result=DBexecute('insert into users_groups (id,usrgrpid,userid) values ('.$id.','.$usrgrpid.','.$userid.')'); - if(!$result) return $result; + $grant = true; + if(($gui_access == GROUP_GUI_ACCESS_DISABLED) || ($users_status == GROUP_STATUS_DISABLED)){ + $grant = (!uint_in_array($USER_DETAILS['userid'],$users)); } - + if($grant){ + $result = DBexecute('delete from users_groups where usrgrpid='.zbx_dbstr($usrgrpid)); + foreach($users as $userid => $name){ + $result &= add_user_to_group($userid,$usrgrpid); + if(!$result) return $result; + } + } + else{ + error(S_USER_CANNOT_DISABLE_ITSELF); + return false; + } + $result=DBexecute("delete from rights where groupid=".$usrgrpid); - foreach($rights as $right) - { + foreach($rights as $right){ $id = get_dbid('rights','rightid'); $result=DBexecute('insert into rights (rightid,groupid,type,permission,id)'. ' values ('.$id.','.$usrgrpid.','.$right['type'].','.$right['permission'].','.$right['id'].')'); + if(!$result) return $result; } return $result; } - function delete_user_group($usrgrpid) - { + function delete_user_group($usrgrpid){ $result = DBexecute("delete from rights where groupid=$usrgrpid"); if(!$result) return $result; @@ -286,16 +349,234 @@ if(!$result) return $result; $result = DBexecute("delete from usrgrp where usrgrpid=$usrgrpid"); - return $result; + return $result; } - function get_group_by_usrgrpid($usrgrpid) - { - if($row = DBfetch(DBselect("select * from usrgrp where usrgrpid=".$usrgrpid))) - { + function get_group_by_usrgrpid($usrgrpid){ + if($row = DBfetch(DBselect("select * from usrgrp where usrgrpid=".$usrgrpid))){ return $row; } /* error("No user groups with id [$usrgrpid]"); */ - return FALSE; + return FALSE; + } + + + function change_group_status($usrgrpid,$users_status){ + $res = false; + + $grant = true; + if($users_status == GROUP_STATUS_DISABLED) $grant = granted2update_group($usrgrpid); + + if($grant){ + $res = DBexecute('UPDATE usrgrp SET users_status='.$users_status.' WHERE usrgrpid='.$usrgrpid); + } + else{ + error(S_USER_CANNOT_CHANGE_STATUS); + } + return $res; + } + + + function change_group_gui_access($usrgrpid,$gui_access){ + $res = false; + + $grant = true; + if($gui_access == GROUP_GUI_ACCESS_DISABLED) $grant= granted2update_group($usrgrpid); + + if($grant){ + $res = DBexecute('UPDATE usrgrp SET gui_access='.$gui_access.' WHERE usrgrpid='.$usrgrpid); + } + else{ + error(S_USER_CANNOT_CHANGE_GUI_ACCESS); + } + return $res; } + +/********************************/ + + function get_user_actionmenu($userid){ + global $USER_DETAILS; + + $action = new CSpan(S_SELECT); + +// add to group + $menus = "Array(Array('".S_GROUPS."',null,null,{'outer' : ['pum_oheader'],'inner' : ['pum_iheader']}), + Array('".S_ADD_TO."',null,null,{'outer' : ['pum_o_submenu'],'inner' : ['pum_i_submenu']},"; + $menus.= "['".S_GROUPS."',null,null,{'outer' : ['pum_oheader'],'inner' : ['pum_iheader']}],"; + + $grp_list = '('; + if($res = DBselect('SELECT DISTINCT ug.usrgrpid '. + ' FROM users_groups ug'. + ' WHERE ug.userid='.zbx_dbstr($userid). + ' AND '.DBin_node('ug.usrgrpid', get_current_nodeid(false)))) + { + while($tmp = DBFetch($res)) $grp_list.= "'".$tmp['usrgrpid']."'".','; + } + $grp_list=rtrim($grp_list,',').')'; + + $res = DBselect('SELECT DISTINCT g.usrgrpid, g.name, g.gui_access, g.users_status'. + ' FROM usrgrp g'. + ' WHERE g.usrgrpid NOT IN'.$grp_list. + ' AND '.DBin_node('g.usrgrpid', get_current_nodeid(false)). + ' ORDER BY g.name'); + + while($group=DBfetch($res)){ + if(!granted2move_user($userid,$group['usrgrpid'])) continue; + + $caption = new CSpan($group['name']); + if($group['users_status'] == GROUP_STATUS_DISABLED){ + $caption->SetClass('red'); + } + else if($group['gui_access'] == GROUP_GUI_ACCESS_DISABLED){ + $caption->SetClass('orange'); + } + + $caption = htmlspecialchars(unpack_object($caption)); + $menus.="['".$caption."','users.php?config=0&form=update&grpaction=1&userid=".$userid."&usrgrpid=".$group['usrgrpid']."']\n,"; + } + + $menus=rtrim($menus,',').'),'; +// remove from group + $menus.= "Array('".S_REMOVE_FROM."',null,null,{'outer' : 'pum_o_submenu','inner' : ['pum_i_submenu']},"; + $menus.= "['".S_GROUPS."',null,null,{'outer' : ['pum_oheader'],'inner' : ['pum_iheader']}],"; + + $res = DBselect('SELECT DISTINCT g.usrgrpid, g.name, g.gui_access, g.users_status '. + ' FROM usrgrp g, users_groups ug'. + ' WHERE ug.userid='.zbx_dbstr($userid). + ' AND ug.usrgrpid = g.usrgrpid '. + ' AND '.DBin_node('g.usrgrpid', get_current_nodeid(false)). + ' ORDER BY g.name'); + + while($group=DBfetch($res)){ + if(!granted2move_user($userid,$group['usrgrpid'])) continue; + + $caption = new CSpan($group['name']); + if($group['users_status'] == GROUP_STATUS_DISABLED){ + $caption->SetClass('red'); + } + else if($group['gui_access'] == GROUP_GUI_ACCESS_DISABLED){ + $caption->SetClass('orange'); + } + + $caption = htmlspecialchars(unpack_object($caption)); + $menus.="['".$caption."','users.php?config=0&form=update&grpaction=0&userid=".$userid."&usrgrpid=".$group['usrgrpid']."']\n,"; + } + + $menus=rtrim($menus,',').'),'; + if($USER_DETAILS['userid'] == $userid){ + $menus=rtrim($menus,',').')'; + } + else{ +// add to GUI ACCESS + $menus.= "Array('".S_GUI_ACCESS."',null,null,{'outer' : ['pum_oheader'],'inner' : ['pum_iheader']}), + Array('".S_ADD_TO."',null,null,{'outer' : 'pum_o_submenu','inner' : ['pum_i_submenu']},"; + $menus.= "['".S_GUI_ACCESS."',null,null,{'outer' : ['pum_oheader'],'inner' : ['pum_iheader']}],"; + + $grp_list = '('; + if($res = DBselect('SELECT DISTINCT ug.usrgrpid '. + ' FROM users_groups ug, usrgrp g'. + ' WHERE ug.userid='.zbx_dbstr($userid). + ' AND g.gui_access='.GROUP_GUI_ACCESS_DISABLED. + ' AND '.DBin_node('g.usrgrpid', get_current_nodeid(false)))) + { + while($tmp = DBFetch($res)) $grp_list.= "'".$tmp['usrgrpid']."'".','; + } + $grp_list=rtrim($grp_list,',').')'; + + $res = DBselect('SELECT DISTINCT g.usrgrpid, g.name'. + ' FROM usrgrp g'. + ' WHERE g.usrgrpid NOT IN'.$grp_list. + ' AND g.gui_access='.GROUP_GUI_ACCESS_DISABLED. + ' AND '.DBin_node('g.usrgrpid', get_current_nodeid(false)). + ' ORDER BY g.name'); + + while($group=DBfetch($res)){ + $caption = new CSpan($group['name'],'orange'); + $caption = htmlspecialchars(unpack_object($caption)); + $menus.="['".$caption."','users.php?config=0&form=update&grpaction=1&userid=".$userid."&usrgrpid=".$group['usrgrpid']."']\n,"; + } + + $menus=rtrim($menus,',').'),'; +// remove from GUI ACCESS + $menus.= "Array('".S_REMOVE_FROM."',null,null,{'outer' : 'pum_o_submenu','inner' : ['pum_i_submenu']},"; + $menus.= "['".S_GUI_ACCESS."',null,null,{'outer' : ['pum_oheader'],'inner' : ['pum_iheader']}],"; + + $res = DBselect('SELECT g.name, g.usrgrpid'. + ' FROM usrgrp g, users_groups ug'. + ' WHERE ug.userid='.zbx_dbstr($userid). + ' AND ug.usrgrpid = g.usrgrpid '. + ' AND g.gui_access='.GROUP_GUI_ACCESS_DISABLED. + ' AND '.DBin_node('g.usrgrpid', get_current_nodeid(false)). + ' ORDER BY g.name'); + + while($group=DBfetch($res)){ + $caption = new CSpan($group['name'],'orange'); + $caption = htmlspecialchars(unpack_object($caption)); + + $menus.="['".$caption."','users.php?config=0&form=update&grpaction=0&userid=".$userid."&usrgrpid=".$group['usrgrpid']."']\n,"; + } + + $menus=rtrim($menus,',').'),'; + +// add to DISABLED + $menus.= "Array('".S_STATUS_DISABLED."',null,null,{'outer' : ['pum_oheader'],'inner' : ['pum_iheader']}), + Array('".S_ADD_TO."',null,null,{'outer' : 'pum_o_submenu','inner' : ['pum_i_submenu']},"; + $menus.= "['".S_STATUS_DISABLED."',null,null,{'outer' : ['pum_oheader'],'inner' : ['pum_iheader']}],"; + + $grp_list = '('; + if($res = DBselect('SELECT DISTINCT ug.usrgrpid '. + ' FROM users_groups ug, usrgrp g'. + ' WHERE ug.userid='.zbx_dbstr($userid). + ' AND g.users_status='.GROUP_STATUS_DISABLED. + ' AND '.DBin_node('g.usrgrpid', get_current_nodeid(false)))) + { + while($tmp = DBFetch($res)) $grp_list.= "'".$tmp['usrgrpid']."'".','; + } + $grp_list=rtrim($grp_list,',').')'; + + $res = DBselect('SELECT DISTINCT g.usrgrpid, g.name'. + ' FROM usrgrp g'. + ' WHERE g.usrgrpid NOT IN'.$grp_list. + ' AND g.users_status='.GROUP_STATUS_DISABLED. + ' AND '.DBin_node('g.usrgrpid', get_current_nodeid(false)). + ' ORDER BY g.name'); + + while($group=DBfetch($res)){ + $caption = new CSpan($group['name'],'red'); + $caption = htmlspecialchars(unpack_object($caption)); + + $menus.="['".$caption."','users.php?config=0&form=update&grpaction=1&userid=".$userid."&usrgrpid=".$group['usrgrpid']."']\n,"; + } + + $menus=rtrim($menus,',').'),'; +// remove from DISABLED + $menus.= "Array('".S_REMOVE_FROM."',null,null,{'outer' : 'pum_o_submenu','inner' : ['pum_i_submenu']},"; + $menus.= "['".S_STATUS_DISABLED."',null,null,{'outer' : ['pum_oheader'],'inner' : ['pum_iheader']}],"; + + $res = DBselect('SELECT g.name, g.usrgrpid'. + ' FROM usrgrp g, users_groups ug'. + ' WHERE ug.userid='.zbx_dbstr($userid). + ' AND ug.usrgrpid = g.usrgrpid '. + ' AND g.users_status='.GROUP_STATUS_DISABLED. + ' AND '.DBin_node('g.usrgrpid', get_current_nodeid(false)). + ' ORDER BY g.name'); + + + while($group=DBfetch($res)){ + $caption = new CSpan($group['name'],'red'); + $caption = htmlspecialchars(unpack_object($caption)); + + $menus.="['".$caption."','users.php?config=0&form=update&grpaction=0&userid=".$userid."&usrgrpid=".$group['usrgrpid']."']\n,"; + } + + $menus=rtrim($menus,',').'))'; + } + + $script = new CScript("javascript: show_popup_menu(event,".$menus.",240);"); + $action->AddAction('onclick',$script); + $action->AddOption('onmouseover','javascript: this.style.cursor = "pointer";'); + + return $action; + } + ?> |
