Check permissions when accessing pages
authorJoey Schulze <joey@infodrom.org>
Sat, 6 Mar 2010 16:16:32 +0000 (17:16 +0100)
committerJoey Schulze <joey@infodrom.org>
Sat, 6 Mar 2010 16:16:32 +0000 (17:16 +0100)
ajax/ajax.php
lib/general.php

index e855674..6597a76 100644 (file)
@@ -268,13 +268,6 @@ function get_infos($mask)
   return array('info' => query_db($sql));
 }
 
-function format_ajax($data)
-{
-  header('Content-type: application/json; charset=UTF-8');
-  echo json_encode($data);
-  exit;
-}
-
 if (empty($_POST['func']))
   exit;
 
index 9ec2941..7c5d5f3 100644 (file)
@@ -5,6 +5,35 @@ function passwd($login,$pass)
   return md5(md5($pass).$login);
 }
 
+function format_ajax($data)
+{
+  header('Content-type: application/json; charset=UTF-8');
+  echo json_encode($data);
+  exit;
+}
+
+function check_permissions($name)
+{
+  $sql = sprintf("SELECT count(*) AS count FROM sys_mask "
+                . "JOIN sys_menu ON sys_mask.menu = sys_menu.id "
+                . "JOIN sys_group_mask ON sys_mask.id = sys_group_mask.mask "
+                . "WHERE sys_group_mask.gid = %d AND fname = '%s'",
+                $_SESSION['sys']['group'], pg_escape_string($name));
+  error_log($sql);
+
+  $sth = pg_query($sql);
+
+  if ($sth === false) return false;
+
+  $row = pg_fetch_assoc($sth);
+  if ($row === false) return false;
+
+  if ($row['count'] == 0)
+    return false;
+
+  return true;
+}
+
 function check_session()
 {
   if (!empty($_SESSION['sys']['login']) && !empty($_GET['logout'])) {
@@ -26,6 +55,44 @@ function check_session()
     header('Location: ./?login=true');
     exit();
   }
+
+  /* regular mask */
+  if (!empty($_GET['mask'])) {
+    if (check_permissions($_GET['mask']))
+      return true;
+    else {
+      header('Location: ./');
+      exit();
+    }
+  }
+
+  /* table data */
+  if (substr($_SERVER["SCRIPT_FILENAME"],-17) == '/ricoXMLquery.php' &&
+      !empty($_GET['id']) && substr($_GET['id'],0,5) == 'grid_') {
+    if (check_permissions(substr($_GET['id'],5)))
+      return true;
+    else
+      format_ajax(array('error' => 'No permission to access data'));
+  }
+
+  /* table connections */
+  if (substr($_SERVER["SCRIPT_FILENAME"],-25) == '/ricoUpdateConnection.php' &&
+      !empty($_POST['table'])) {
+    if (check_permissions($_POST['table']))
+      return true;
+    else
+      format_ajax(array('error' => 'No permission to access data'));
+  }
+
+  /* ajax calls */
+  if (substr($_SERVER["SCRIPT_FILENAME"],-9) == '/ajax.php' &&
+      !empty($_POST['source'])) {
+    if (check_permissions(substr($_POST['source'],5)))
+      return true;
+    else
+      format_ajax(array('error' => 'No permission to access data'));
+  }
+
 }
 
 function sanitise_filename($file)