Skip to content

Commit 79468e6

Browse files
committed
Use board permissions to be applied for the shares
Signed-off-by: Julius Härtl <jus@bitgrid.net>
1 parent 0c6dfb2 commit 79468e6

4 files changed

Lines changed: 25 additions & 6 deletions

File tree

lib/Service/FilesAppService.php

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,7 @@ public function extendData(Attachment $attachment) {
132132
'mimetype' => $file->getMimeType(),
133133
'info' => pathinfo($file->getName()),
134134
'hasPreview' => $this->preview->isAvailable($file),
135+
'permissions' => $share->getPermissions(),
135136
]);
136137
return $attachment;
137138
}
@@ -170,7 +171,11 @@ public function create(Attachment $attachment) {
170171
$fileName = $file['name'];
171172

172173
$userFolder = $this->rootFolder->getUserFolder($this->userId);
173-
$folder = $userFolder->get($this->configService->getAttachmentFolder());
174+
try {
175+
$folder = $userFolder->get($this->configService->getAttachmentFolder());
176+
} catch (NotFoundException $e) {
177+
$folder = $userFolder->newFolder($this->configService->getAttachmentFolder());
178+
}
174179

175180
$fileName = $folder->getNonExistingName($fileName);
176181
$target = $folder->newFile($fileName);

lib/Service/PermissionService.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ public function checkPermission($mapper, $id, $permission, $userId = null) {
142142
}
143143

144144
if ($permission === Acl::PERMISSION_SHARE && $this->shareManager->sharingDisabledForUser($this->userId)) {
145-
return false;
145+
throw new NoPermissionException('Permission denied');
146146
}
147147

148148
if ($this->userIsBoardOwner($boardId, $userId)) {

lib/Sharing/DeckShareProvider.php

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
use OCP\AppFramework\Db\DoesNotExistException;
3838
use OCP\AppFramework\Db\MultipleObjectsReturnedException;
3939
use OCP\AppFramework\Utility\ITimeFactory;
40+
use OCP\Constants;
4041
use OCP\DB\QueryBuilder\IQueryBuilder;
4142
use OCP\EventDispatcher\IEventDispatcher;
4243
use OCP\Files\Folder;
@@ -267,10 +268,25 @@ private function createShareObject(array $data): IShare {
267268
$entryData['parent'] = $entryData['f_parent'];
268269
$share->setNodeCacheEntry(Cache::cacheEntryFromData($entryData, \OC::$server->get(IMimeTypeLoader::class)));
269270
}
270-
271271
return $share;
272272
}
273273

274+
private function applyBoardPermission($share, $permissions) {
275+
try {
276+
$this->permissionService->checkPermission($this->cardMapper, $share->getSharedWith(), Acl::PERMISSION_EDIT);
277+
} catch (NoPermissionException $e) {
278+
$permissions &= Constants::PERMISSION_ALL - Constants::PERMISSION_UPDATE;
279+
$permissions &= Constants::PERMISSION_ALL - Constants::PERMISSION_CREATE;
280+
$permissions &= Constants::PERMISSION_ALL - Constants::PERMISSION_DELETE;
281+
}
282+
283+
try {
284+
$this->permissionService->checkPermission($this->cardMapper, $share->getSharedWith(), Acl::PERMISSION_SHARE);
285+
} catch (NoPermissionException $e) {
286+
$permissions &= Constants::PERMISSION_ALL - Constants::PERMISSION_SHARE;
287+
}
288+
$share->setPermissions($permissions);
289+
}
274290
/**
275291
* @inheritDoc
276292
*/
@@ -629,7 +645,7 @@ private function resolveSharesForRecipient(array $shares, string $userId): array
629645
$stmt = $query->execute();
630646

631647
while ($data = $stmt->fetch()) {
632-
$shareMap[$data['parent']]->setPermissions((int)$data['permissions']);
648+
$this->applyBoardPermission($shareMap[$data['parent']], (int)$data['permissions']);
633649
$shareMap[$data['parent']]->setTarget($data['file_target']);
634650
}
635651

@@ -740,7 +756,6 @@ public function getSharedWith($userId, $shareType, $node, $limit, $offset): arra
740756
$offset--;
741757
continue;
742758
}
743-
744759
$shares[] = $this->createShareObject($data);
745760
}
746761
$cursor->closeCursor();

src/components/card/AttachmentList.vue

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -212,7 +212,6 @@ export default {
212212
213213
axios.post(generateOcsUrl('apps/files_sharing/api/v1', 2) + 'shares', {
214214
path,
215-
permissions: 19,
216215
shareType: 12,
217216
shareWith: '' + this.cardId,
218217
}).then(() => {

0 commit comments

Comments
 (0)