diff --git a/metadata/dbms/records.php b/metadata/dbms/records.php index d69291e..4301b88 100644 --- a/metadata/dbms/records.php +++ b/metadata/dbms/records.php @@ -220,7 +220,7 @@ { sendError('Connect error '.$_SERVER['HTTP_HOST'].': "'.$e->getMessage().'"!'); } - //Пытаемся автоматически залогинется по GUID из COOKIE + //Пытаемся автоматически залогинется по GUID из COOKIE (TODO авторизация должна быть в отдельном файле! Смотри директорию password ) /*if($_SESSION['USER_ID']==null && $_COOKIE['GUID']!=null) { $res = $db->query("select * from ".$Schema."p__Login(null,null,null,'".$_COOKIE['GUID']."');"); @@ -269,7 +269,6 @@ if ($fn==0) //отправить метаданные клиенту по запрошенному узлу { session_write_close(); //Разблокируем сессионный файл так как запросы могут быть достаточно долгими - //if (!isset($_SESSION['USER_ID']) || $_SESSION['USER_ID']=='') sendError('Вы не авторизованы! '.$_SERVER['PHP_SELF']); $typename=findFirstNode($reqNode, "type")->getAttribute("n"); $currNode=getMetadataNode($typename); @@ -279,42 +278,32 @@ $objXMLDocument=$currNode->ownerDocument; //Вернём значение прав доступа для запрошенного объекта - //$allow=true; - $allow=false; - //$sql_query='select a.*,at.name from _Access a, _Actions at where a.del=false and at.id=a.action_id and at.name=\'Insert_'.$typename.'\' and a.role_id in (select group_id from _UsersRoles where user_id='.$_SESSION['USER_ID'].');' - $sql_query='select '.$Schema.'p_getaccess('.getSQLValue(gettype($_SESSION['USER_ID']),$_SESSION['USER_ID']).',\'Insert_'.$typename.'\') as allow;'; - - $res = $db->query($sql_query); - while ($row = $res->fetch(PDO::FETCH_ASSOC))// $row - ассоциативный массив значений, ключи - названия столбцов + $allow_ins=false; + $allow_upd=false; + $allow_del=false; + $sql_query='select '.$Schema.'p_getaccess(:user_id1,:action_insert) as ins,'.$Schema.'p_getaccess(:user_id2,:action_update) as upd,'.$Schema.'p_getaccess(:user_id3,:action_delete) as del;'; + $stmt = $db->prepare($sql); + $stmt->bindValue(':user_id1', $_SESSION['USER_ID'], PDO::PARAM_INT); //getSQLValue(gettype($_SESSION['USER_ID']),$_SESSION['USER_ID']) + $stmt->bindValue(':user_id2', $_SESSION['USER_ID'], PDO::PARAM_INT); //getSQLValue(gettype($_SESSION['USER_ID']),$_SESSION['USER_ID']) + $stmt->bindValue(':user_id3', $_SESSION['USER_ID'], PDO::PARAM_INT); //getSQLValue(gettype($_SESSION['USER_ID']),$_SESSION['USER_ID']) + $stmt->bindValue(':action_insert', 'Insert_'.$typename, PDO::PARAM_STR); + $stmt->bindValue(':action_update', 'Update_'.$typename, PDO::PARAM_STR); + $stmt->bindValue(':action_delete', 'Delete_'.$typename, PDO::PARAM_STR); + $res=$stmt->execute(); + while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { - $allow=$allow || ($row['allow'] == 't'); + $allow_ins=$row['ins'] == 't'; + $allow_upd=$row['upd'] == 't'; + $allow_del=$row['del'] == 't'; } $xmlAttr = $objXMLDocument->createAttribute("ins"); //insert - $xmlAttr->nodeValue = $allow ? "1" : "0"; + $xmlAttr->nodeValue = $allow_ins ? "1" : "0"; $currNode->setAttributeNode($xmlAttr); - - $allow=false; - //$sql_query='select a.*,at.name from _Access a, _Actions at where a.del=false and at.id=a.action_id and at.name=\'Update_'.$typename.'\' and a.role_id in (select group_id from _UsersRoles where user_id='.$_SESSION['USER_ID'].');'; - $sql_query='select '.$Schema.'p_getaccess('.getSQLValue(gettype($_SESSION['USER_ID']),$_SESSION['USER_ID']).',\'Update_'.$typename.'\') as allow;'; - $res = $db->query($sql_query); - while ($row = $res->fetch(PDO::FETCH_ASSOC))// $row - ассоциативный массив значений, ключи - названия столбцов - { - $allow=$allow || ($row['allow'] == 't'); - } - $xmlAttr = $objXMLDocument->createAttribute("upd"); //insert - $xmlAttr->nodeValue = $allow ? "1" : "0"; + $xmlAttr = $objXMLDocument->createAttribute("upd"); //update + $xmlAttr->nodeValue = $allow_upd ? "1" : "0"; $currNode->setAttributeNode($xmlAttr); - - $allow=false; - //$sql_query='select a.*,at.name from _Access a, _Actions at where a.del=false and at.id=a.action_id and at.name=\'Delete_'.$typename.'\' and a.role_id in (select group_id from _UsersRoles where user_id='.$_SESSION['USER_ID'].');'; - $sql_query='select '.$Schema.'p_getaccess('.getSQLValue(gettype($_SESSION['USER_ID']),$_SESSION['USER_ID']).',\'Delete_'.$typename.'\') as allow;'; - $res = $db->query($sql_query); - while ($row = $res->fetch(PDO::FETCH_ASSOC))// $row - ассоциативный массив значений, ключи - названия столбцов - { - $allow=$allow || ($row['allow'] == 't'); - } $xmlAttr = $objXMLDocument->createAttribute("del"); //delete - $xmlAttr->nodeValue = $allow ? "1" : "0"; + $xmlAttr->nodeValue = $allow_del ? "1" : "0"; $currNode->setAttributeNode($xmlAttr); $allow=true; @@ -340,7 +329,6 @@ }else if ($fn==1) //вставка записи (результат id записи) { - //if (!isset($_SESSION['USER_ID']) || $_SESSION['USER_ID']=='') sendError('Вы не авторизованы! '.$_SERVER['PHP_SELF']); session_write_close(); //Разблокируем сессионный файл так как запросы могут быть достаточно долгими $typename=findFirstNode($reqNode,"type")->getAttribute("n"); @@ -448,7 +436,6 @@ if ($fn==2) //редактирование (результат id записи) { session_write_close(); //Разблокируем сессионный файл так как запросы могут быть достаточно долгими - //if (!isset($_SESSION['USER_ID']) || $_SESSION['USER_ID']=='') sendError('Вы не авторизованы! '.$_SERVER['PHP_SELF']); $nodeType=findFirstNode($reqNode,"type"); $typename=$nodeType->getAttribute("n"); @@ -558,7 +545,6 @@ if ($fn==3) //удаление (результат id записи) { session_write_close(); //Разблокируем сессионный файл так как запросы могут быть достаточно долгими - //if (!isset($_SESSION['USER_ID']) || $_SESSION['USER_ID']=='') sendError('Вы не авторизованы! '.$_SERVER['PHP_SELF']); $nodeType=findFirstNode($reqNode,"type"); $typename=$nodeType->getAttribute("n"); @@ -597,7 +583,6 @@ if ($fn==4 || $fn==11) //взять данные из базы по переданным значениям фильтра ($fn==11 для обновления записи у клиента после вставки или редактировании) { session_write_close(); //Разблокируем сессионный файл так как запросы могут быть достаточно долгими - //if (!isset($_SESSION['USER_ID']) || $_SESSION['USER_ID']=='') sendError('Вы не авторизованы! 4'.$_SERVER['PHP_SELF']); $rowspagecount = 100; //записей на страницу $nTypeR=findFirstNode($reqNode,'type'); @@ -746,7 +731,6 @@ if ($fn==5) //вернуть клиенту данные по id для редактирования одной записи { session_write_close(); //Разблокируем сессионный файл так как запросы могут быть достаточно долгими - //if (!isset($_SESSION['USER_ID']) || $_SESSION['USER_ID']=='') sendError('Вы не авторизованы! '.$_SERVER['PHP_SELF']); $sql_query=''; $node=findFirstNode($reqNode,'type'); @@ -858,7 +842,6 @@ if ($fn==6) //вернуть клиенту данные колонки таблицы для заполнения выпадающего списка SELECT либо выборка названия поля типа object { session_write_close(); //Разблокируем сессионный файл так как запросы могут быть достаточно долгими - //if (!isset($_SESSION['USER_ID']) || $_SESSION['USER_ID']=='') sendError('Вы не авторизованы! '.$_SERVER['PHP_SELF']); $tNodeR=findFirstNode($reqNode,'type'); $typename=$tNodeR->getAttribute("n"); //Название принятого узла @@ -1125,14 +1108,15 @@ if ($code!=$_POST['code']) return new AuthError('invalid code'); } session_write_close(); //Разблокируем сессионный файл так как запросы могут быть достаточно долгими - //if (!isset($_SESSION['USER_ID']) || $_SESSION['USER_ID']=='') sendError(trt('You are not logged in!')); - + //Выбираем информацию о текущем пользователе $name=''; - $sql="select Coalesce(surname,'') || ' ' || Coalesce(name,'') || ' ' || Coalesce(patronymic,'') as name from ".$Schema."_users where id=".$_SESSION['USER_ID'].";"; - $res = $db->query($sql); - if($res->rowCount()>0) - { $result = $res->fetch(PDO::FETCH_ASSOC); + $sql="select Coalesce(surname,'') || ' ' || Coalesce(name,'') || ' ' || Coalesce(patronymic,'') as name from ".$Schema."_users where id=:user_id;"; + $stmt = $db->prepare($sql); + $stmt->bindValue(':user_id', $_SESSION['USER_ID'], PDO::PARAM_INT); + $res=$stmt->execute(); + if($res && $stmt->rowCount()>0) + { $result = $stmt->fetch(PDO::FETCH_NUM); $name=''.$result['name'].'
'; } $res=null; //Чтоб сработал сборщик мусора, а то вываливается ошибка: "Cannot execute queries while other unbuffered queries are active". diff --git a/metadata/include/tools.php b/metadata/include/tools.php index ddbe917..4cb4444 100644 --- a/metadata/include/tools.php +++ b/metadata/include/tools.php @@ -102,20 +102,24 @@ function getAccess($key) global $db; $result=false; + $sql="select main.p_getaccess(:user_id,:key) as acc;"; + $stmt = $db->prepare($sql); if(isset($_SESSION['USER_ID'])) - $sql="select main.p_getaccess(".$_SESSION['USER_ID'].",'".$key."') as acc;"; + $stmt->bindValue(':user_id', $_SESSION['USER_ID'], PDO::PARAM_INT); else - $sql="select main.p_getaccess(0,'".$key."') as acc;"; + $stmt->bindValue(':user_id', 0, PDO::PARAM_INT); + $stmt->bindValue(':key', $key, PDO::PARAM_STR); + $res=null; try { - $res = $db->query($sql); + $res=$stmt->execute(); }catch (Exception $e) { echo $e->getMessage(); } - if($res!=NULL && $res->rowCount()>0) + if($res && $stmt->rowCount()>0) { - while ($row = $res->fetch(PDO::FETCH_NUM)) + while ($row = $stmt->fetch(PDO::FETCH_NUM)) { $result=$row[0]; } diff --git a/metadata/update/get.php b/metadata/update/get.php index 6cba1a8..943d7ae 100644 --- a/metadata/update/get.php +++ b/metadata/update/get.php @@ -120,7 +120,6 @@ while ($row = $res->fetch(PDO::FETCH_ASSOC)) { for($j=0;$jfields);$j++) { - //print $tbl->fields[$j]->name.'='.$tbl->fields[$j]->getValue().'
'; $stmtU->bindValue(':'.$tbl->fields[$j]->name, $tbl->fields[$j]->getValue(), $tbl->fields[$j]->getPDOType()); } print '
Update ';