Merge pull request #1600 from simonspa/p/fix-group-sharing

Fix sharing with group
This commit is contained in:
Louis 2023-01-24 07:37:50 +01:00 committed by GitHub
commit cb6acf8588
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 35 additions and 6 deletions

View File

@ -332,6 +332,40 @@ class AlbumMapper {
return array_values(array_filter($collaborators, fn ($c) => $c !== null));
}
/**
* @param int $albumId
* @param string $userId
* @return bool
*/
public function isCollaborator(int $albumId, string $userId): bool {
$query = $this->connection->getQueryBuilder();
$query->select("collaborator_id", "collaborator_type")
->from("photos_albums_collabs")
->where($query->expr()->eq('album_id', $query->createNamedParameter($albumId, IQueryBuilder::PARAM_INT)));
$rows = $query->executeQuery()->fetchAll();
foreach ($rows as $row) {
switch ($row['collaborator_type']) {
case self::TYPE_USER:
if ($row['collaborator_id'] === $userId) {
return true;
}
break;
case self::TYPE_GROUP:
if ($this->groupManager->isInGroup($userId, $row['collaborator_id'])) {
return true;
}
break;
default:
break;
}
}
return false;
}
/**
* @param int $albumId
* @param array{'id': string, 'type': int} $collaborators

View File

@ -25,7 +25,6 @@ namespace OCA\Photos\Sabre\Album;
use Sabre\DAV\Exception\Forbidden;
use Sabre\DAV\Exception\Conflict;
use OCA\Photos\Album\AlbumMapper;
class SharedAlbumRoot extends AlbumRoot {
/**
@ -47,11 +46,7 @@ class SharedAlbumRoot extends AlbumRoot {
throw new Conflict("File $sourceId is already in the folder");
}
$collaboratorIds = array_map(
fn ($collaborator) => $collaborator['type'].':'.$collaborator['id'],
$this->albumMapper->getCollaborators($this->album->getAlbum()->getId()),
);
if (!in_array(AlbumMapper::TYPE_USER.':'.$this->userId, $collaboratorIds)) {
if (!$this->albumMapper->isCollaborator($this->album->getAlbum()->getId(), $this->userId)) {
return false;
}