浏览代码

updated get acl

Piotr Labudda 9 年之前
父节点
当前提交
5ac68a7d4e

+ 0 - 1
SE/se-lib/Api/WfsServerBase.php

@@ -37,7 +37,6 @@ class Api_WfsServerBase {
 		if (2 != count($typeEx)) throw new Api_WfsException("Could not get acl for '{$typeName}' - syntax error");
 		if ('p5_' == substr($sourceName, 0, 3)) $sourceName = substr($sourceName, 3);// remove prefix 'p5_'
 		$acl = $this->_usrAcl->getObjectAcl($sourceName, $objName);
-		if (!$acl) throw new Api_WfsException("Could not get acl for '{$typeName}'");
 		$forceTblAclInit = 0;//('1' == V::get('_force', '', $_GET));
 		$acl->init($forceTblAclInit);
 		return $acl;

+ 0 - 1
SE/se-lib/Core/AclHelper.php

@@ -51,7 +51,6 @@ class Core_AclHelper {// Helper class for Acl
 
     DBG::_('DBG_ACL', '>3', "parseNamespaceUrl", $ns, __CLASS__, __FUNCTION__, __LINE__);
     $acl = User::getAcl()->getObjectAcl($ns['prefix'], $ns['name']);
-    if (!$acl) throw new Exception("Could not get acl for '{$ns['prefix']}:{$ns['name']}'");
     $acl->init($forceTblAclInit);
     return $acl;
 	}

+ 10 - 4
SE/se-lib/Route/Storage.php

@@ -1277,8 +1277,11 @@ jQuery(document).on('p5UIBtnAjax:Storage:addBaseProces:ajaxLoaded', function(e,
 				throw new AlertInfoException("Zasob tabela '{$tblName}' już istnieje - nr '{$zasobItemFound}'");
 			}
 
-			$acl = User::getAcl()->getObjectAcl('default_db', 'crm_lista_zasobow');
-			if (!$acl) throw new Exception("Brak dostępu do tabeli Zasoby");
+			try {
+				$acl = User::getAcl()->getObjectAcl('default_db', 'crm_lista_zasobow');
+			} catch (Exception $e) {
+				throw new Exception("Brak dostępu do tabeli Zasoby");
+			}
 
 			$item = array();
 			$item['PARENT_ID'] = $zasobStorageId;
@@ -1324,8 +1327,11 @@ jQuery(document).on('p5UIBtnAjax:Storage:addBaseProces:ajaxLoaded', function(e,
 			$idTable = $this->fetchTableId($zasobStorageId, $tblName);
 			if ($idTable <= 0) throw new Exception("Zasob tabela '{$tblName}' nie istnieje");
 
-			$acl = User::getAcl()->getObjectAcl('default_db', 'crm_lista_zasobow');
-			if (!$acl) throw new Exception("Brak dostępu do tabeli Zasoby");
+			try {
+				$acl = User::getAcl()->getObjectAcl('default_db', 'crm_lista_zasobow');
+			} catch (Exception $e) {
+				throw new Exception("Brak dostępu do tabeli Zasoby");
+			}
 
 			$item = array();
 			$item['PARENT_ID'] = $idTable;

+ 4 - 2
SE/se-lib/Route/UrlAction/ProjektyProNetMediaBudget.php

@@ -275,10 +275,12 @@ dostęp dla zarządu i os. odp.	kwota końcowa
 		$widgetProject['fieldName'] = 'ID_PROJECT';
 		$widgetProject['dataUrl'] = "index.php?_route=UrlAction_ProjektyProNetMediaZamZlec&_task=typespecial&fld={$widgetProject['fieldName']}";
 		$widgetProject['typeSpecial'] = null;
-		$acl = User::getAcl()->getObjectAcl('default_db', 'IN7_MK_BAZA_DYSTRYBUCJI');
-		if ($acl) {
+		try {
+			$acl = User::getAcl()->getObjectAcl('default_db', 'IN7_MK_BAZA_DYSTRYBUCJI');
 			$acl->init($force = false);
 			$widgetProject['typeSpecial'] = Typespecial::getInstance($widgetProject['idKomorka'], $colName = $widgetProject['fieldName']);
+		} catch (Exception $e) {
+			
 		}
 		return $widgetProject;
 	}

+ 4 - 2
SE/se-lib/Route/UrlAction/ProjektyProNetMediaZamZlec.php

@@ -98,10 +98,12 @@ class Route_UrlAction_ProjektyProNetMediaZamZlec extends RouteBase {// TODO: Url
 		$widgetProject['fieldName'] = 'ID_PROJECT';
 		$widgetProject['dataUrl'] = "index.php?_route=UrlAction_ProjektyProNetMediaZamZlec&_task=typespecial&fld={$widgetProject['fieldName']}";
 		$widgetProject['typeSpecial'] = null;
-		$acl = User::getAcl()->getObjectAcl('default_db', 'IN7_MK_BAZA_DYSTRYBUCJI');
-		if ($acl) {
+		try {
+			$acl = User::getAcl()->getObjectAcl('default_db', 'IN7_MK_BAZA_DYSTRYBUCJI');
 			$acl->init($force = false);
 			$widgetProject['typeSpecial'] = Typespecial::getInstance($widgetProject['idKomorka'], $colName = $widgetProject['fieldName']);
+		} catch (Exception $e) {
+			
 		}
 		return $widgetProject;
 	}

+ 43 - 0
SE/se-lib/SchemaFactory.php

@@ -0,0 +1,43 @@
+<?php
+
+class SchemaFactory {
+
+  public static function loadDefaultObject($name) {
+    $objClassName = "Schema_{$name}StorageAcl";
+    if (!Lib::tryLoadClass($objClassName)) throw new HttpException("Not implemented - storage object not found '{$name}'", 501);
+    return new $objClassName();
+  }
+
+  public static function loadTableObject($tableName, $name) {
+    $className = "Schema_DefaultDb_{$tableName}_{$name}StorageAcl";// TODO: load by Factory class which build from schema file
+    // list($nsUri, $prefix, $name) = Api_WfsNs::parseObjectNsUri('default_objects/AccessOwner');
+
+    $path = implode('/', [
+      APP_PATH_LIB,
+      'Schema',
+      'DefaultDb',
+      strtolower($tableName),
+      implode('/', explode('_', $name)).'StorageAcl.php',
+    ]);
+    if (file_exists($path)) {
+      require_once $path;
+    } else {
+      $path = implode('/', [
+        APP_PATH_LIB,
+        'Schema',
+        'DefaultDb',
+        strtolower($tableName),
+        $name.'StorageAcl.php',
+      ]);
+      if (file_exists($path)) {
+        require_once $path;
+      }
+    }
+    if (!class_exists($className)) {
+      throw new HttpException("Not implemented - default db storage object not found 'default_db/{$tableName}/{$name}'", 501);
+    }
+
+    return new $className;
+  }
+
+}

+ 12 - 17
SE/se-lib/UserAcl.php

@@ -5,6 +5,7 @@ Lib::loadClass('UsersHelper');
 Lib::loadClass('ProcesHelper');
 Lib::loadClass('TableAcl');
 Lib::loadClass('SchemaReader');
+Lib::loadClass('SchemaFactory');
 
 class UserAcl {
 
@@ -156,27 +157,21 @@ class UserAcl {
 	}
 
 	public function getObjectAcl($sourceName, $objName) {// TODO: rename $sourceName to $prefix (xml namespace - @see Core_AclHelper)
+		if (empty($objName)) throw new Exception("Missing object name", 400);
 		if ('default_db' == $sourceName) {
 			$zasobTblInfo = ProcesHelper::getZasobTableInfoByUri("{$sourceName}/{$objName}");
 			if (!$zasobTblInfo) throw new HttpException("Object not Found '{$objName}'", 404);
-			if ($this->hasTableAcl($zasobTblInfo->ID)) {
-				return $this->getTableAcl($zasobTblInfo->ID);
-			}
-		} else if ('objects' == $sourceName && !empty($objName)) {
-			$objClassName = "Schema_{$objName}StorageAcl";
-			if (!Lib::tryLoadClass($objClassName)) throw new HttpException("Not implemented", 501);
-			return new $objClassName();
-		} else if ('default_objects' == $sourceName && !empty($objName)) {
-			$objClassName = "Schema_{$objName}StorageAcl";
-			if (!Lib::tryLoadClass($objClassName)) throw new HttpException("Not implemented - storage object not found '{$objName}'", 501);
-			return new $objClassName();
-		} else if ('default_db__x3A__' == substr($sourceName, 0, 17) && !empty($objName)) {
+			if (!$this->hasTableAcl($zasobTblInfo->ID)) throw new HttpException("Access Denied for '{$sourceName}/{$objName}'", 403);
+			return $this->getTableAcl($zasobTblInfo->ID);
+		} else if ('objects' == $sourceName) {
+			return SchemaFactory::loadDefaultObject($objName);
+		} else if ('default_objects' == $sourceName) {
+			return SchemaFactory::loadDefaultObject($objName);
+		} else if ('default_db__x3A__' == substr($sourceName, 0, 17)) {
 			$rootTableName = strtolower(substr($sourceName, 17));
-			$objClassName = "Schema_DefaultDb_{$rootTableName}_{$objName}StorageAcl";// TODO: load by Factory class which build from schema file
-			if (!Lib::tryLoadClass($objClassName)) throw new HttpException("Not implemented", 501);
-			return new $objClassName();
-		} else throw new HttpException("Not Implemented", 501);
-		return false;
+			return SchemaFactory::loadTableObject($rootTableName, $objName);
+		}
+		throw new HttpException("Not Implemented", 501);
 	}
 
 	public function getTablesAcl() {// TODO: read from `CRM_PROCES_idx_TABLE_TO_USER_VIEW`