public static function checkPermissions($filter, $permission = Horde_Perms::READ, $resource = null)
{
$userID = $GLOBALS['registry']->getAuth();
switch ($filter) {
case 'backend':
if (is_null($resource)) {
$resource = $GLOBALS['session']->get('gollem', 'backend_key');
}
$backendTag = 'gollem:backends:' . $resource;
$perms = $GLOBALS['injector']->getInstance('Horde_Perms');
return !$perms->exists($backendTag) || $perms->hasPermission($backendTag, $userID, $permission);
case 'directory':
if (empty(self::$backend['shares'])) {
return true;
}
if (is_null($resource)) {
$resource = self::$backend['dir'];
}
if (strpos($resource, self::$backend['home']) === 0) {
return true;
}
$shares = $GLOBALS['injector']->getInstance('Gollem_Shares');
$backend = $GLOBALS['session']->get('gollem', 'backend_key');
$directory = $resource;
while (strlen($directory) && $directory != './' && $directory != '/') {
try {
return $shares->getShare($backend . '|' . $directory)->hasPermission($userID, $permission);
} catch (Horde_Exception_NotFound $e) {
}
$directory = dirname($directory);
}
/* Intermediate solution until we display shared folders
* independent from the directory tree. Check if there are
* any sub-directories with show permissions and allow
* browsing the directory in this case. */
if ($permission == Horde_Perms::READ || $permission == Horde_Perms::SHOW) {
$dirs = $shares->listShares($userID, array('perm' => Horde_Perms::SHOW));
foreach ($dirs as $dir) {
if (strpos($dir->getName(), $backend . '|' . $resource) === 0) {
return true;
}
}
}
break;
}
return false;
}