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 ';