|
|
@@ -47,53 +47,12 @@ class Core_AclHelper {// Helper class for Acl
|
|
|
return self::getAclByNamespace(str_replace(':', '/', $typeName), $forceTblAclInit);
|
|
|
}
|
|
|
public static function getAclByNamespace($namespace, $forceTblAclInit = false) {
|
|
|
- if ('http' != substr($namespace, 0, 4)) $namespace = Api_WfsNs::getBaseWfsUri() . '/' . $namespace;//Request::getHostUri() . '/' . $namespace;
|
|
|
+ $ns = self::parseNamespaceUrl($namespace);
|
|
|
|
|
|
- $baseNsUri = Api_WfsNs::getBaseWfsUri();
|
|
|
- if ("{$baseNsUri}/" == substr($namespace, 0, strlen($baseNsUri) + 1)) {
|
|
|
- $schemaNs = substr($namespace, strlen($baseNsUri) + 1);
|
|
|
- $ns = explode('/', $schemaNs);// "http://biuro.biall-net.pl/wfs/ default_db/{$nazwa_tabeli}/{$nazwa_obj}
|
|
|
- $sourceName = array_shift($ns);// remove first element - source name
|
|
|
- $objName = $ns[0];
|
|
|
- if ('default_db' == $sourceName || 'p5_default_db' == $sourceName) {
|
|
|
- $sourceName = 'default_db';
|
|
|
- if (1 == count($ns)) {
|
|
|
- $acl = User::getAcl()->getObjectAcl($sourceName, $objName);
|
|
|
- if (!$acl) throw new Exception("Could not get acl for '{$schemaNs}'");
|
|
|
- $acl->init($forceTblAclInit);
|
|
|
- return $acl;
|
|
|
- } else if (2 == count($ns)) {
|
|
|
-
|
|
|
- throw new Exception("TODO: default_db: '{$schemaNs}' ns:[ ".implode(", ", $ns)." ]", 501);
|
|
|
- } else throw new Exception("Nieznany namespace default_db: '{$schemaNs}'", 501);
|
|
|
- }
|
|
|
- else if ('default_objects' == $sourceName || 'SystemObjects' == $sourceName || 'p5_objects' == $sourceName) {
|
|
|
- $sourceName = 'objects';
|
|
|
- if (1 == count($ns)) {
|
|
|
- $acl = User::getAcl()->getObjectAcl($sourceName, $objName);
|
|
|
- if (!$acl) throw new Exception("Could not get acl for '{$schemaNs}'");
|
|
|
- $acl->init($forceTblAclInit);
|
|
|
- return $acl;
|
|
|
- } else throw new Exception("Nieznany namespace SystemObjects: '{$schemaNs}'", 501);
|
|
|
- }
|
|
|
- else if ('default_objects__x3A__' == substr($sourceName, 0, 22)) {// default_objects__x3A__Zaliczka:Zaliczka
|
|
|
- $sourceName = 'objects';
|
|
|
- if (1 == count($ns)) {
|
|
|
- $acl = User::getAcl()->getObjectAcl($sourceName, $objName);
|
|
|
- if (!$acl) throw new Exception("Could not get acl for '{$schemaNs}'");
|
|
|
- $acl->init($forceTblAclInit);
|
|
|
- return $acl;
|
|
|
- } else throw new Exception("Nieznany namespace SystemObjects: '{$schemaNs}'", 501);
|
|
|
- }
|
|
|
- else if ('zasob_' == substr($sourceName, 0, 6)) {
|
|
|
- $dbName = substr($sourceName, 6);
|
|
|
- throw new Exception("TODO db[{$dbName}] namespace '{$schemaNs}'", 501);
|
|
|
- }
|
|
|
- else throw new Exception("Nieznany namespace '{$schemaNs}'", 501);
|
|
|
- }
|
|
|
- else throw new HttpException("Zasoby zewnętrzenj systemu nie są jeszcze zaimplementowane", 501);
|
|
|
-
|
|
|
- throw new HttpException("TODO L.".__LINE__." ns({$namespace})", 501);
|
|
|
+ $acl = User::getAcl()->getObjectAcl($ns['prefix'], $ns['name']);
|
|
|
+ if (!$acl) throw new Exception("Could not get acl for '{$schemaNs}'");
|
|
|
+ $acl->init($forceTblAclInit);
|
|
|
+ return $acl;
|
|
|
}
|
|
|
|
|
|
public static function getMoreFunctionsCell($acl, $args) {
|
|
|
@@ -222,15 +181,15 @@ class Core_AclHelper {// Helper class for Acl
|
|
|
|
|
|
public static function getAclList() {// @usage Core_AclHelper::getAclList();// @returns array [ $typeName , ... ]
|
|
|
$aclList = array();
|
|
|
- // Schema_AccessGroupStorageAcl, load by User::getAcl()->getObjectAcl('objects', $objName);
|
|
|
+ // Schema_AccessGroupStorageAcl, load by User::getAcl()->getObjectAcl('default_objects', $objName);
|
|
|
// $objClassName = "Schema_{$objName}StorageAcl";
|
|
|
// if (!Lib::tryLoadClass($objClassName)) throw new HttpException("Not implemented", 501);
|
|
|
// $ grep -r 'class ' SE/se-lib/Schema/*Acl.php
|
|
|
- // SE/se-lib/Schema/AccessGroupStorageAcl.php:class Schema_AccessGroupStorageAcl extends Core_AclBase {// Read only class
|
|
|
- // SE/se-lib/Schema/AccessOwnerStorageAcl.php:class Schema_AccessOwnerStorageAcl extends Core_AclBase {
|
|
|
- // SE/se-lib/Schema/FileStorageAcl.php:class Schema_FileStorageAcl extends Core_AclBase {
|
|
|
- // SE/se-lib/Schema/KorespondencjaStorageAcl.php:class Schema_KorespondencjaStorageAcl extends Core_AclBase {
|
|
|
- // SE/se-lib/Schema/TestPermsStorageAcl.php:class Schema_TestPermsStorageAcl extends Core_AclBase {
|
|
|
+ // SE/se-lib/Schema/AccessGroupStorageAcl.php:class Schema_AccessGroupStorageAcl extends Core_AclBase
|
|
|
+ // SE/se-lib/Schema/AccessOwnerStorageAcl.php:class Schema_AccessOwnerStorageAcl extends Core_AclBase
|
|
|
+ // SE/se-lib/Schema/FileStorageAcl.php:class Schema_FileStorageAcl extends Core_AclBase
|
|
|
+ // SE/se-lib/Schema/KorespondencjaStorageAcl.php:class Schema_KorespondencjaStorageAcl extends Core_AclBase
|
|
|
+ // SE/se-lib/Schema/TestPermsStorageAcl.php:class Schema_TestPermsStorageAcl extends Core_AclBase
|
|
|
$aclList[] = 'default_objects:AccessGroupRead';
|
|
|
$aclList[] = 'default_objects:AccessGroupWrite';
|
|
|
$aclList[] = 'default_objects:AccessOwner';
|
|
|
@@ -254,4 +213,90 @@ class Core_AclHelper {// Helper class for Acl
|
|
|
return $aclList;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * Parse namespace url into parts.
|
|
|
+ *
|
|
|
+ * @param $namespace - absolute or relative url
|
|
|
+ * @return array:
|
|
|
+ * name: element name
|
|
|
+ * url: url wihtout name
|
|
|
+ * prefix: xml prefix
|
|
|
+ * sourceName: used by engine - maybe to remove (used by Core_AclHelper::getAclByNamespace($namespace))
|
|
|
+ *
|
|
|
+ * @example - create xmlns attribute:
|
|
|
+ * xmlns:{$ns['prefix']}="{$ns['url']}"
|
|
|
+ *
|
|
|
+ * @example - wfs typeName:
|
|
|
+ * typeName = "{$ns['prefix']}:{$ns['name']}"
|
|
|
+ *
|
|
|
+ * @example 'default_db/TEST_PERMS' => Array:
|
|
|
+ * [name] => TEST_PERMS
|
|
|
+ * [prefix] => default_db
|
|
|
+ * [url] => https://biuro.biall-net.pl/wfs/default_db
|
|
|
+ * [sourceName] => default_db
|
|
|
+ *
|
|
|
+ * @example 'default_objects/AccessOwner' => Array:
|
|
|
+ * [name] => AccessOwner
|
|
|
+ * [prefix] => default_objects
|
|
|
+ * [url] => https://biuro.biall-net.pl/wfs/default_objects
|
|
|
+ * [sourceName] => default_objects
|
|
|
+ *
|
|
|
+ * @example 'default_db/ZALICZKA/Zaliczka' => Array:
|
|
|
+ * [name] => Zaliczka
|
|
|
+ * [prefix] => default_db__x3A__Zaliczka
|
|
|
+ * [url] => https://biuro.biall-net.pl/wfs/default_db/ZALICZKA
|
|
|
+ * [sourceName] => table_objects
|
|
|
+ *
|
|
|
+ */
|
|
|
+ public static function parseNamespaceUrl($namespace) {// returns assoc array: [ 'name', 'url', 'prefix', 'sourceName' ]
|
|
|
+ // TODO: the same algo like getAclByNamespace($namespace)
|
|
|
+ $baseNsUri = Api_WfsNs::getBaseWfsUri();
|
|
|
+ if ('http' != substr($namespace, 0, 4)) $namespace = "{$baseNsUri}/{$namespace}";//Request::getHostUri() . '/' . $namespace;
|
|
|
+
|
|
|
+ $nsUrl = $baseNsUri . '/' . '';
|
|
|
+ if ("{$baseNsUri}/" != substr($namespace, 0, strlen($baseNsUri) + 1)) throw new HttpException("Zasoby zewnętrzenj systemu nie są jeszcze zaimplementowane", 501);
|
|
|
+
|
|
|
+ $relativeNsUrl = substr($namespace, strlen($baseNsUri) + 1);
|
|
|
+ // convert '__x3A__' to '/' in url
|
|
|
+ $nsEx = explode('/', str_replace('__x3A__', '/', $relativeNsUrl));// "http://biuro.biall-net.pl/wfs/ default_db/{$nazwa_tabeli}/{$nazwa_obj}
|
|
|
+ // default_db__x3A__ZALICZKA/Zaliczka => default_db/ZALICZKA/Zaliczka
|
|
|
+ $sourceName = array_shift($nsEx);// remove first element - source name
|
|
|
+ $objName = array_pop($nsEx);// name is always last part from url
|
|
|
+
|
|
|
+ if ('default_db' == $sourceName || 'p5_default_db' == $sourceName) {
|
|
|
+ if (count($nsEx) > 1) throw new Exception("Nieznany namespace default_db: '{$relativeNsUrl}'", 501);
|
|
|
+
|
|
|
+ $sourceName = 'default_db';
|
|
|
+ $nsPrefix = $sourceName;
|
|
|
+ if (1 == count($nsEx)) {
|
|
|
+ $sourceName = 'table_objects';// TODO: another source name to read from simpleSchema @see Core_AclSimpleSchemaBase
|
|
|
+ $nsPrefix = 'default_db__x3A__' . $objName;
|
|
|
+ }
|
|
|
+ // $objName = $nsEx[1];// 'default_db/ZALICZKA:Zaliczka' => ('objects', 'Zaliczka') - possible name conflicts
|
|
|
+ $nsUrl = trim($baseNsUri . '/default_db/' . implode("/", $nsEx), '/');
|
|
|
+ return [ 'name' => $objName, 'prefix' => $nsPrefix, 'url' => $nsUrl, 'sourceName' => $sourceName ];
|
|
|
+ }
|
|
|
+ else if ('default_objects' == $sourceName || 'SystemObjects' == $sourceName) {
|
|
|
+ if (count($nsEx) > 1) throw new Exception("Nieznany namespace SystemObjects: '{$relativeNsUrl}'", 501);
|
|
|
+
|
|
|
+ $sourceName = 'default_objects';
|
|
|
+ $nsUrl = trim($baseNsUri . '/default_objects/' . implode("/", $nsEx), '/');
|
|
|
+ $nsPrefix = 'default_objects';
|
|
|
+ return [ 'name' => $objName, 'prefix' => $nsPrefix, 'url' => $nsUrl, 'sourceName' => $sourceName ];
|
|
|
+ }
|
|
|
+ else if ('p5_objects' == $sourceName || 'objects' == $sourceName) {
|
|
|
+ if (count($nsEx) > 1) throw new Exception("Nieznany namespace SystemObjects: '{$relativeNsUrl}'", 501);
|
|
|
+
|
|
|
+ $sourceName = 'default_objects';
|
|
|
+ $nsUrl = trim($baseNsUri . '/default_objects/' . implode("/", $nsEx), '/');
|
|
|
+ $nsPrefix = 'default_objects';
|
|
|
+ return [ 'name' => $objName, 'prefix' => $nsPrefix, 'url' => $nsUrl, 'sourceName' => $sourceName ];
|
|
|
+ }
|
|
|
+ else if ('zasob_' == substr($sourceName, 0, 6)) {
|
|
|
+ $dbName = substr($sourceName, 6);// database id
|
|
|
+ throw new Exception("TODO db[{$dbName}] namespace '{$relativeNsUrl}'", 501);
|
|
|
+ }
|
|
|
+ else throw new Exception("Nieznany namespace '{$relativeNsUrl}'", 501);
|
|
|
+ }
|
|
|
+
|
|
|
}
|