add option to keep duplicates in the list of users with access to a file, e.g. for the unshare operation we need to know if access was granted more than once, for example as group share and as individual share

This commit is contained in:
Björn Schießle 2013-02-12 17:00:33 +01:00
parent d1bbb30385
commit a692264fa4
3 changed files with 17 additions and 19 deletions

View File

@ -182,7 +182,7 @@ class Hooks {
$path = Util::getFilePath($params['itemSource']); $path = Util::getFilePath($params['itemSource']);
$shares = \OCP\Share::getUsersSharingFile( $path, 1 ); $shares = \OCP\Share::getUsersSharingFile( $path, true );
return Crypt::encKeyfileToMultipleUsers($shares, $path); return Crypt::encKeyfileToMultipleUsers($shares, $path);
@ -194,11 +194,11 @@ class Hooks {
public static function preUnshare( $params ) { public static function preUnshare( $params ) {
$path = Util::getFilePath($params['itemSource']); $path = Util::getFilePath($params['itemSource']);
$shares = \OCP\Share::getUsersSharingFile( $path, 1 ); $shares = \OCP\Share::getUsersSharingFile( $path, true, false );
// remove the user from the list from which the file will be unshared // remove the user from the list from which the file will be unshared
unset($shares[$params['shareWith']]); unset($shares[$params['shareWith']]);
return Crypt::encKeyfileToMultipleUsers($shares, $path ); return Crypt::encKeyfileToMultipleUsers(array_unique($shares), $path );
} }
/** /**

View File

@ -118,15 +118,8 @@ class Proxy extends \OC_FileProxy {
// $fileOwner = \OC\Files\Filesystem::getOwner( $path ); // $fileOwner = \OC\Files\Filesystem::getOwner( $path );
// List everyone sharing the file // List everyone sharing the file
$shares = \OCP\Share::getUsersSharingFile( $filePath, 1 ); //TODO check, is this path always the path to the source file?
$userIds = \OCP\Share::getUsersSharingFile( $filePath, true );
$userIds = array();
foreach ( $shares as $share ) {
$userIds[] = $share['userId'];
}
$publicKeys = Keymanager::getPublicKeys( $rootView, $userIds ); $publicKeys = Keymanager::getPublicKeys( $rootView, $userIds );

View File

@ -145,11 +145,14 @@ class Share {
/** /**
* @brief Find which users can access a shared item * @brief Find which users can access a shared item
* @return bool / array * @param $path to the file
* @param include owner to the list of users with access to the file
* @param remove duplicates in the result
* @return array
* @note $path needs to be relative to user data dir, e.g. 'file.txt' * @note $path needs to be relative to user data dir, e.g. 'file.txt'
* not '/admin/data/file.txt' * not '/admin/data/file.txt'
*/ */
public static function getUsersSharingFile( $path, $includeOwner = 0 ) { public static function getUsersSharingFile( $path, $includeOwner = false, $removeDuplicates = true ) {
$user = \OCP\User::getUser(); $user = \OCP\User::getUser();
$path_parts = explode(DIRECTORY_SEPARATOR, trim($path, DIRECTORY_SEPARATOR)); $path_parts = explode(DIRECTORY_SEPARATOR, trim($path, DIRECTORY_SEPARATOR));
@ -204,14 +207,16 @@ class Share {
if ( ! empty( $shares ) ) { if ( ! empty( $shares ) ) {
// Include owner in list of users, if requested // Include owner in list of users, if requested
if ( $includeOwner == 1 ) { if ( $includeOwner ) {
$shares[] = $user; $shares[] = $user;
} }
return array_unique($shares);
} else {
return false;
} }
if ( $removeDuplicates )
return array_unique($shares);
else {
return $shares;
}
} }
/** /**