$iValue) { $aClients[$iKey] = Contenido_Security::toInteger($aClients[$iKey]); } //Query to check, if langid is in list of clients associated $sSql = "SELECT * FROM ".$aCfg['tab']['clients_lang']. " WHERE idlang=".$iLang." AND idclient IN ('".implode("','",$aClients)."');"; $oDb->query($sSql); if ($oDb->next_record()) { return true; } else { return false; } } /** * Duplicate rights for any element * * @param string $area main area name * @param int $iditem ID of element to copy * @param int $newiditem ID of the new element * @param int $idlang ID of lang parameter * * @author Martin Horwath * @copyright dayside.net */ function copyRightsForElement($area, $iditem, $newiditem, $idlang = false) { global $cfg, $perm, $auth, $area_tree; $db = new DB_ConLite(); $db2 = new DB_ConLite(); // get all user_id values for con_rights $userIDContainer = $perm->getGroupsForUser($auth->auth['uid']); // add groups if available $userIDContainer[] = $auth->auth['uid']; // add user_id of current user foreach ($userIDContainer as $key) { $statement_where2[] = "user_id = '".Contenido_Security::escapeDB($key, $db)."' "; } $where_users = '('.implode(' OR ', $statement_where2 ) .')'; // only duplicate on user and where user is member of // get all idarea values for $area // short way $AreaContainer = $area_tree[$perm->showareas($area)]; // long version start // get all actions for corresponding area $AreaActionContainer = array(); $sql = "SELECT idarea, idaction FROM ".$cfg["tab"]["actions"]." WHERE idarea IN (".implode (',', $AreaContainer).")"; $db->query($sql); while ($db->next_record()) { $AreaActionContainer[] = array('idarea'=>$db->f('idarea'), 'idaction'=>$db->f('idaction')); } // build sql statement for con_rights foreach ($AreaActionContainer as $key) { $statement_where[] = "( idarea = ".Contenido_Security::toInteger($key["idarea"])." AND idaction = ".Contenido_Security::toInteger($key["idaction"])." )"; } $where_area_actions = '('.implode(' OR ', $statement_where ) .')'; // only correct area action pairs possible // final sql statement to get all effected elements in con_right $sql = "SELECT * FROM ".$cfg["tab"]["rights"]." WHERE {$where_area_actions} AND {$where_users} AND idcat = {$iditem}"; // long version end if ($idlang) { $sql.= " AND idlang='$idlang'"; } $db->query($sql); while ($db->next_record()) { $sql = "INSERT INTO ".$cfg["tab"]["rights"]." (idright,user_id,idarea,idaction,idcat,idclient,idlang,`type`) VALUES ('".Contenido_Security::toInteger($db2->nextid($cfg["tab"]["rights"]))."', '".Contenido_Security::escapeDB($db->f("user_id"), $db)."', '".Contenido_Security::toInteger($db->f("idarea"))."', '".Contenido_Security::toInteger($db->f("idaction"))."', '".Contenido_Security::toInteger($newiditem)."','".Contenido_Security::toInteger($db->f("idclient"))."', '".Contenido_Security::toInteger($db->f("idlang"))."', '".Contenido_Security::toInteger($db->f("type"))."');"; $db2->query($sql); } // permissions reloaded... $perm->load_permissions(true); } /** * Create rights for any element * * @param string $area main area name * @param int $iditem ID of new element * @param int $idlang ID of lang parameter * * @author Martin Horwath * @copyright dayside.net */ function createRightsForElement($area, $iditem, $idlang = false) { global $cfg, $perm, $auth, $area_tree, $client; if (!is_object($perm)) { return false; } if (!is_object($auth)) { return false; } $db = new DB_ConLite(); $db2 = new DB_ConLite(); // get all user_id values for con_rights $userIDContainer = $perm->getGroupsForUser($auth->auth['uid']); // add groups if available $userIDContainer[] = $auth->auth['uid']; // add user_id of current user foreach ($userIDContainer as $key) { $statement_where2[] = "user_id = '".Contenido_Security::toInteger($key)."' "; } $where_users = '('.implode(' OR ', $statement_where2 ) .')'; // only duplicate on user and where user is member of // get all idarea values for $area // short way $AreaContainer = $area_tree[$perm->showareas($area)]; $sql = "SELECT * FROM ".$cfg["tab"]["rights"]." WHERE idclient='".Contenido_Security::toInteger($client)."' AND idarea IN (".implode (',', $AreaContainer).") AND idcat != 0 AND idaction!='0' AND {$where_users}"; if ($idlang) { $sql.= " AND idlang='".Contenido_Security::toInteger($idlang)."'"; } $db->query($sql); $RightsContainer = array(); while($db->next_record()){ $RightsContainer[$db->f('user_id')][$db->f('idlang')][$db->f('type')][$db->f('idaction')] = $db->f('idarea'); } // i found no better way to set the rights // double entries should not be possible anymore... foreach ($RightsContainer as $userid=>$LangContainer) { foreach ($LangContainer as $idlang=>$TypeContainer) { foreach ($TypeContainer as $type=>$ActionContainer) { foreach ($ActionContainer as $idaction=>$idarea) { $sql = "INSERT INTO ".$cfg["tab"]["rights"]." (idright, user_id,idarea,idaction,idcat,idclient,idlang,`type`) VALUES ('".Contenido_Security::toInteger($db2->nextid($cfg["tab"]["rights"]))."', '".Contenido_Security::toInteger($userid)."', '".Contenido_Security::toInteger($idarea)."', '".Contenido_Security::toInteger($idaction)."', '".Contenido_Security::toInteger($iditem)."', '".Contenido_Security::toInteger($client)."', '".Contenido_Security::toInteger($idlang)."', '".Contenido_Security::toInteger($type)."')"; $db2->query($sql); } } } } // permissions reloaded... $perm->load_permissions(true); } /** * Delete rights for any element * * @param string $area main area name * @param int $iditem ID of new element * @param int $idlang ID of lang parameter * * @author Martin Horwath * @copyright dayside.net */ function deleteRightsForElement($area, $iditem, $idlang = false) { global $cfg, $perm, $area_tree, $client; $db = new DB_ConLite(); // get all idarea values for $area $AreaContainer = $area_tree[$perm->showareas(Contenido_Security::escapeDB($area, $db))]; $sql = "DELETE FROM ".$cfg["tab"]["rights"]." WHERE idcat='".Contenido_Security::toInteger($iditem)."' AND idclient='".Contenido_Security::toInteger($client)."' AND idarea IN (".implode (',', $AreaContainer).")"; if ($idlang) { $sql.= " AND idlang='".Contenido_Security::toInteger($idlang)."'"; } $db->query($sql); // permissions reloaded... $perm->load_permissions(true); } /** * Builds user/group permissions (sysadmin, admin, client and language) by * processing request variables ($msysadmin, $madmin, $mclient, $mlang) and * returns the build permissions array. * * @todo Do we really need to add other perms, if the user/group gets the * 'sysadmin' permission? * @param bool $bAddUserToClient Flag to add current user to current client, * if no client is specified. * @return array */ function buildUserOrGroupPermsFromRequest($bAddUserToClient = false) { global $cfg, $msysadmin, $madmin, $mclient, $mlang, $auth, $client; $aPerms = array(); // check and prevalidation $bSysadmin = (isset($msysadmin) && $msysadmin); $aAdmin = (isset($madmin) && is_array($madmin)) ? $madmin : array(); foreach ($aAdmin as $p => $value) { if (!is_numeric($value)) { unset($aAdmin[$p]); } } $aClient = (isset($mclient) && is_array($mclient)) ? $mclient : array(); foreach ($aClient as $p => $value) { if (!is_numeric($value)) { unset($aClient[$p]); } } $aLang = (isset($mlang) && is_array($mlang)) ? $mlang : array(); foreach ($aLang as $p => $value) { if (!is_numeric($value)) { unset($aLang[$p]); } } // build permissions array if ($bSysadmin) { $aPerms[] = 'sysadmin'; } foreach ($aAdmin as $value) { $aPerms[] = sprintf('admin[%s]', $value); } foreach ($aClient as $value) { $aPerms[] = sprintf('client[%s]', $value); } if (count($aClient) == 0 && $bAddUserToClient) { // Add user to the current client, if the current user isn't sysadmin and // no client has been specified. This avoids new accounts which are not // accessible by the current user (client admin) anymore. $aUserPerm = explode(',', $auth->auth['perm']); if (!in_array('sysadmin', $aUserPerm)) { $aPerms[] = sprintf('client[%s]', $client); } } if (count($aLang) > 0 && count($aClient) > 0) { // adding language perms makes sense if we have also at least one selected client $db = new DB_ConLite(); foreach ($aLang as $value) { if (checkLangInClients($aClient, $value, $cfg, $db)) { $aPerms[] = sprintf('lang[%s]', $value); } } } return $aPerms; } ?>