Make sure to respect deleted group shares by user
This commit is contained in:
parent
c882d46e5f
commit
629bac22fd
|
@ -372,6 +372,85 @@ class Test_Files_Sharing_Mount extends OCA\Files_sharing\Tests\TestCase {
|
||||||
\OC_Group::removeFromGroup(self::TEST_FILES_SHARING_API_USER3, 'testGroup');
|
\OC_Group::removeFromGroup(self::TEST_FILES_SHARING_API_USER3, 'testGroup');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* If the permissions on a group share are upgraded be sure to still respect
|
||||||
|
* removed shares by a member of that group
|
||||||
|
*/
|
||||||
|
function testPermissionUpgradeOnUserDeletedGroupShare() {
|
||||||
|
\OC_Group::createGroup('testGroup');
|
||||||
|
\OC_Group::addToGroup(self::TEST_FILES_SHARING_API_USER1, 'testGroup');
|
||||||
|
\OC_Group::addToGroup(self::TEST_FILES_SHARING_API_USER2, 'testGroup');
|
||||||
|
\OC_Group::addToGroup(self::TEST_FILES_SHARING_API_USER3, 'testGroup');
|
||||||
|
|
||||||
|
$connection = \OC::$server->getDatabaseConnection();
|
||||||
|
|
||||||
|
// Share item with group
|
||||||
|
$fileinfo = $this->view->getFileInfo($this->folder);
|
||||||
|
$this->assertTrue(
|
||||||
|
\OCP\Share::shareItem('folder', $fileinfo['fileid'], \OCP\Share::SHARE_TYPE_GROUP, "testGroup", \OCP\Constants::PERMISSION_READ)
|
||||||
|
);
|
||||||
|
|
||||||
|
// Login as user 2 and verify the item exists
|
||||||
|
self::loginHelper(self::TEST_FILES_SHARING_API_USER2);
|
||||||
|
$this->assertTrue(\OC\Files\Filesystem::file_exists($this->folder));
|
||||||
|
$result = \OCP\Share::getItemSharedWithBySource('folder', $fileinfo['fileid']);
|
||||||
|
$this->assertNotEmpty($result);
|
||||||
|
$this->assertEquals(\OCP\Constants::PERMISSION_READ, $result['permissions']);
|
||||||
|
|
||||||
|
// Delete the share
|
||||||
|
$this->assertTrue(\OC\Files\Filesystem::rmdir($this->folder));
|
||||||
|
$this->assertFalse(\OC\Files\Filesystem::file_exists($this->folder));
|
||||||
|
|
||||||
|
// Verify we do not get a share
|
||||||
|
$result = \OCP\Share::getItemSharedWithBySource('folder', $fileinfo['fileid']);
|
||||||
|
$this->assertEmpty($result);
|
||||||
|
|
||||||
|
// Verify that the permission is correct in the DB
|
||||||
|
$qb = $connection->getQueryBuilder();
|
||||||
|
$qb->select('*')
|
||||||
|
->from('share')
|
||||||
|
->where($qb->expr()->eq('file_source', $qb->createParameter('fileSource')))
|
||||||
|
->andWhere($qb->expr()->eq('share_type', $qb->createParameter('shareType')))
|
||||||
|
->setParameter(':fileSource', $fileinfo['fileid'])
|
||||||
|
->setParameter(':shareType', 2);
|
||||||
|
$res = $qb->execute()->fetchAll();
|
||||||
|
|
||||||
|
$this->assertCount(1, $res);
|
||||||
|
$this->assertEquals(0, $res[0]['permissions']);
|
||||||
|
|
||||||
|
// Login as user 1 again and change permissions
|
||||||
|
self::loginHelper(self::TEST_FILES_SHARING_API_USER1);
|
||||||
|
$this->assertTrue(
|
||||||
|
\OCP\Share::setPermissions('folder', $fileinfo['fileid'], \OCP\Share::SHARE_TYPE_GROUP, "testGroup", \OCP\Constants::PERMISSION_ALL)
|
||||||
|
);
|
||||||
|
|
||||||
|
// Login as user 2 and verify
|
||||||
|
self::loginHelper(self::TEST_FILES_SHARING_API_USER2);
|
||||||
|
$this->assertFalse(\OC\Files\Filesystem::file_exists($this->folder));
|
||||||
|
$result = \OCP\Share::getItemSharedWithBySource('folder', $fileinfo['fileid']);
|
||||||
|
$this->assertEmpty($result);
|
||||||
|
|
||||||
|
$connection = \OC::$server->getDatabaseConnection();
|
||||||
|
$qb = $connection->getQueryBuilder();
|
||||||
|
$qb->select('*')
|
||||||
|
->from('share')
|
||||||
|
->where($qb->expr()->eq('file_source', $qb->createParameter('fileSource')))
|
||||||
|
->andWhere($qb->expr()->eq('share_type', $qb->createParameter('shareType')))
|
||||||
|
->setParameter(':fileSource', $fileinfo['fileid'])
|
||||||
|
->setParameter(':shareType', 2);
|
||||||
|
$res = $qb->execute()->fetchAll();
|
||||||
|
|
||||||
|
$this->assertCount(1, $res);
|
||||||
|
$this->assertEquals(0, $res[0]['permissions']);
|
||||||
|
|
||||||
|
//cleanup
|
||||||
|
self::loginHelper(self::TEST_FILES_SHARING_API_USER1);
|
||||||
|
\OCP\Share::unshare('folder', $fileinfo['fileid'], \OCP\Share::SHARE_TYPE_GROUP, 'testGroup');
|
||||||
|
\OC_Group::removeFromGroup(self::TEST_FILES_SHARING_API_USER1, 'testGroup');
|
||||||
|
\OC_Group::removeFromGroup(self::TEST_FILES_SHARING_API_USER2, 'testGroup');
|
||||||
|
\OC_Group::removeFromGroup(self::TEST_FILES_SHARING_API_USER3, 'testGroup');
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class DummyTestClassSharedMount extends \OCA\Files_Sharing\SharedMount {
|
class DummyTestClassSharedMount extends \OCA\Files_Sharing\SharedMount {
|
||||||
|
|
|
@ -1217,8 +1217,10 @@ class Share extends Constants {
|
||||||
->from('share')
|
->from('share')
|
||||||
->where($qb->expr()->eq('parent', $qb->createParameter('parent')))
|
->where($qb->expr()->eq('parent', $qb->createParameter('parent')))
|
||||||
->andWhere($qb->expr()->eq('share_type', $qb->createParameter('share_type')))
|
->andWhere($qb->expr()->eq('share_type', $qb->createParameter('share_type')))
|
||||||
|
->andWhere($qb->expr()->neq('permissions', $qb->createParameter('shareDeleted')))
|
||||||
->setParameter(':parent', (int)$rootItem['id'])
|
->setParameter(':parent', (int)$rootItem['id'])
|
||||||
->setParameter(':share_type', 2);
|
->setParameter(':share_type', 2)
|
||||||
|
->setParameter(':shareDeleted', 0);
|
||||||
$result = $qb->execute();
|
$result = $qb->execute();
|
||||||
|
|
||||||
$ids = [];
|
$ids = [];
|
||||||
|
|
Loading…
Reference in New Issue