mirror of
https://github.com/nextcloud/server.git
synced 2026-05-28 04:32:30 -04:00
more share permission logic to storage wrapper
this way we only have to determine the share permissions once Signed-off-by: Robin Appelman <robin@icewind.nl>
This commit is contained in:
parent
dfbc0d8572
commit
a031bc4788
6 changed files with 32 additions and 10 deletions
|
|
@ -36,6 +36,8 @@
|
|||
namespace OCA\Files_Sharing\Tests;
|
||||
|
||||
use OC\Files\Cache\Scanner;
|
||||
use OC\Files\Filesystem;
|
||||
use OC\Files\SetupManager;
|
||||
use OCA\Files_Sharing\Controller\ShareAPIController;
|
||||
use OCP\App\IAppManager;
|
||||
use OCP\AppFramework\OCS\OCSBadRequestException;
|
||||
|
|
@ -74,6 +76,8 @@ class ApiTest extends TestCase {
|
|||
\OC::$server->getConfig()->setAppValue('core', 'shareapi_exclude_groups', 'no');
|
||||
\OC::$server->getConfig()->setAppValue('core', 'shareapi_expire_after_n_days', '7');
|
||||
|
||||
Filesystem::getLoader()->removeStorageWrapper('sharing_mask');
|
||||
|
||||
$this->folder = self::TEST_FOLDER_NAME;
|
||||
$this->subfolder = '/subfolder_share_api_test';
|
||||
$this->subsubfolder = '/subsubfolder_share_api_test';
|
||||
|
|
|
|||
|
|
@ -231,7 +231,7 @@ class FileInfo implements \OCP\Files\FileInfo, \ArrayAccess {
|
|||
}
|
||||
|
||||
/**
|
||||
* Return the currently version used for the HMAC in the encryption app
|
||||
* Return the current version used for the HMAC in the encryption app
|
||||
*/
|
||||
public function getEncryptedVersion(): int {
|
||||
return isset($this->data['encryptedVersion']) ? (int) $this->data['encryptedVersion'] : 1;
|
||||
|
|
@ -241,11 +241,7 @@ class FileInfo implements \OCP\Files\FileInfo, \ArrayAccess {
|
|||
* @return int
|
||||
*/
|
||||
public function getPermissions() {
|
||||
$perms = (int) $this->data['permissions'];
|
||||
if (\OCP\Util::isSharingDisabledForUser() || ($this->isShared() && !\OC\Share\Share::isResharingAllowed())) {
|
||||
$perms = $perms & ~\OCP\Constants::PERMISSION_SHARE;
|
||||
}
|
||||
return $perms;
|
||||
return (int) $this->data['permissions'];
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -26,6 +26,7 @@
|
|||
namespace OC\Files\ObjectStore;
|
||||
|
||||
use OC\User\User;
|
||||
use OCP\IUser;
|
||||
|
||||
class HomeObjectStoreStorage extends ObjectStoreStorage implements \OCP\Files\IHomeStorage {
|
||||
/**
|
||||
|
|
@ -61,7 +62,7 @@ class HomeObjectStoreStorage extends ObjectStoreStorage implements \OCP\Files\IH
|
|||
* @param string $path, optional
|
||||
* @return \OC\User\User
|
||||
*/
|
||||
public function getUser($path = null) {
|
||||
public function getUser($path = null): IUser {
|
||||
return $this->user;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -34,9 +34,11 @@ use OC\Files\Storage\Wrapper\Encoding;
|
|||
use OC\Files\Storage\Wrapper\PermissionsMask;
|
||||
use OC\Files\Storage\Wrapper\Quota;
|
||||
use OC\Lockdown\Filesystem\NullStorage;
|
||||
use OC\Share\Share;
|
||||
use OC_App;
|
||||
use OC_Hook;
|
||||
use OC_Util;
|
||||
use OCA\Files_Sharing\ISharedStorage;
|
||||
use OCP\Constants;
|
||||
use OCP\Diagnostics\IEventLogger;
|
||||
use OCP\EventDispatcher\IEventDispatcher;
|
||||
|
|
@ -60,6 +62,7 @@ use OCP\IUserManager;
|
|||
use OCP\IUserSession;
|
||||
use OCP\Lockdown\ILockdownManager;
|
||||
use OCP\Share\Events\ShareCreatedEvent;
|
||||
use OCP\Share\IManager;
|
||||
use Psr\Log\LoggerInterface;
|
||||
|
||||
class SetupManager {
|
||||
|
|
@ -139,8 +142,17 @@ class SetupManager {
|
|||
return $storage;
|
||||
});
|
||||
|
||||
Filesystem::addStorageWrapper('enable_sharing', function ($mountPoint, IStorage $storage, IMountPoint $mount) {
|
||||
if (!$mount->getOption('enable_sharing', true)) {
|
||||
Filesystem::addStorageWrapper('sharing_mask', function ($mountPoint, IStorage $storage, IMountPoint $mount) {
|
||||
$reSharingEnabled = Share::isResharingAllowed();
|
||||
$sharingEnabledForMount = $mount->getOption('enable_sharing', true);
|
||||
/** @var IUserSession $userSession */
|
||||
$userSession = \OC::$server->get(IUserSession::class);
|
||||
$user = $userSession->getUser();
|
||||
/** @var IManager $shareManager */
|
||||
$shareManager = \OC::$server->get(IManager::class);
|
||||
$sharingEnabledForUser = $user ? !$shareManager->sharingDisabledForUser($user->getUID()) : true;
|
||||
$isShared = $storage->instanceOfStorage(ISharedStorage::class);
|
||||
if (!$sharingEnabledForMount || !$sharingEnabledForUser || (!$reSharingEnabled && $isShared)) {
|
||||
return new PermissionsMask([
|
||||
'storage' => $storage,
|
||||
'mask' => Constants::PERMISSION_ALL - Constants::PERMISSION_SHARE,
|
||||
|
|
|
|||
|
|
@ -26,6 +26,7 @@
|
|||
namespace OC\Files\Storage;
|
||||
|
||||
use OC\Files\Cache\HomePropagator;
|
||||
use OCP\IUser;
|
||||
|
||||
/**
|
||||
* Specialized version of Local storage for home directory usage
|
||||
|
|
@ -94,7 +95,7 @@ class Home extends Local implements \OCP\Files\IHomeStorage {
|
|||
*
|
||||
* @return \OC\User\User owner of this home storage
|
||||
*/
|
||||
public function getUser() {
|
||||
public function getUser(): IUser {
|
||||
return $this->user;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -27,6 +27,7 @@
|
|||
namespace OCP\Files;
|
||||
|
||||
use OCP\Files\Storage\IStorage;
|
||||
use OCP\IUser;
|
||||
|
||||
/**
|
||||
* Interface IHomeStorage
|
||||
|
|
@ -34,4 +35,11 @@ use OCP\Files\Storage\IStorage;
|
|||
* @since 7.0.0
|
||||
*/
|
||||
interface IHomeStorage extends IStorage {
|
||||
/**
|
||||
* Get the user for this home storage
|
||||
*
|
||||
* @return IUser
|
||||
* @since 28.0.0
|
||||
*/
|
||||
public function getUser(): IUser;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue