Esempio n. 1
0
 /**
  * get list of users with access to the file
  *
  * @param string $path to the file
  * @return array  ['users' => $uniqueUserIds, 'public' => $public]
  */
 public function getAccessList($path)
 {
     // Make sure that a share key is generated for the owner too
     list($owner, $ownerPath) = $this->util->getUidAndFilename($path);
     // always add owner to the list of users with access to the file
     $userIds = array($owner);
     if (!$this->util->isFile($owner . '/' . $ownerPath)) {
         return array('users' => $userIds, 'public' => false);
     }
     $ownerPath = substr($ownerPath, strlen('/files'));
     $ownerPath = $this->util->stripPartialFileExtension($ownerPath);
     // first get the shares for the parent and cache the result so that we don't
     // need to check all parents for every file
     $parent = dirname($ownerPath);
     if (isset($this->cache[$parent])) {
         $resultForParents = $this->cache[$parent];
     } else {
         $resultForParents = \OCP\Share::getUsersSharingFile($parent, $owner);
         $this->cache[$parent] = $resultForParents;
     }
     $userIds = \array_merge($userIds, $resultForParents['users']);
     $public = $resultForParents['public'] || $resultForParents['remote'];
     // Find out who, if anyone, is sharing the file
     $resultForFile = \OCP\Share::getUsersSharingFile($ownerPath, $owner, false, false, false);
     $userIds = \array_merge($userIds, $resultForFile['users']);
     $public = $resultForFile['public'] || $resultForFile['remote'] || $public;
     // check if it is a group mount
     if (\OCP\App::isEnabled("files_external")) {
         $mounts = \OC_Mount_Config::getSystemMountPoints();
         foreach ($mounts as $mount) {
             if ($mount['mountpoint'] == substr($ownerPath, 1, strlen($mount['mountpoint']))) {
                 $mountedFor = $this->util->getUserWithAccessToMountPoint($mount['applicable']['users'], $mount['applicable']['groups']);
                 $userIds = array_merge($userIds, $mountedFor);
             }
         }
     }
     // Remove duplicate UIDs
     $uniqueUserIds = array_unique($userIds);
     return array('users' => $uniqueUserIds, 'public' => $public);
 }