Skip to content

Commit 99ae04d

Browse files
committed
fix(files_sharing): Prevent create/delete permissions on file shares
File shares can't support create or delete permissions. This change ensures those permissions are stripped or ignored when the shared item is not a folder. Signed-off-by: nfebe <fenn25.fn@gmail.com>
1 parent 698146c commit 99ae04d

File tree

2 files changed

+34
-3
lines changed

2 files changed

+34
-3
lines changed

apps/files_sharing/src/mixins/ShareDetails.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55

66
import Share from '../models/Share.ts'
77
import Config from '../services/ConfigService.ts'
8+
import { ATOMIC_PERMISSIONS } from '../lib/SharePermissionsToolBox.js'
9+
import logger from '../services/logger.ts'
810

911
export default {
1012
methods: {
@@ -26,6 +28,18 @@ export default {
2628
share = this.mapShareRequestToShareObject(shareRequestObject)
2729
}
2830

31+
if (this.fileInfo.type !== 'dir') {
32+
const originalPermissions = share.permissions
33+
const strippedPermissions = originalPermissions
34+
& ~ATOMIC_PERMISSIONS.CREATE
35+
& ~ATOMIC_PERMISSIONS.DELETE
36+
37+
if (originalPermissions !== strippedPermissions) {
38+
logger.debug('Removed create/delete permissions from file share (only valid for folders)')
39+
share.permissions = strippedPermissions
40+
}
41+
}
42+
2943
const shareDetails = {
3044
fileInfo: this.fileInfo,
3145
share,

apps/files_sharing/src/views/SharingDetailsTab.vue

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@
3838
<NcCheckboxRadioSwitch :button-variant="true"
3939
data-cy-files-sharing-share-permissions-bundle="upload-edit"
4040
:checked.sync="sharingPermission"
41-
:value="bundledPermissions.ALL.toString()"
41+
:value="allPermissions"
4242
name="sharing_permission_radio"
4343
type="radio"
4444
button-variant-grouped="vertical"
@@ -400,6 +400,9 @@ export default {
400400
}
401401
}
402402
},
403+
allPermissions() {
404+
return this.isFolder ? this.bundledPermissions.ALL.toString() : this.bundledPermissions.ALL_FILE.toString()
405+
},
403406
/**
404407
* Can the sharee edit the shared file ?
405408
*/
@@ -712,8 +715,15 @@ export default {
712715
[ATOMIC_PERMISSIONS.DELETE]: this.t('files_sharing', 'Delete'),
713716
}
714717
715-
return [ATOMIC_PERMISSIONS.READ, ATOMIC_PERMISSIONS.CREATE, ATOMIC_PERMISSIONS.UPDATE, ...(this.resharingIsPossible ? [ATOMIC_PERMISSIONS.SHARE] : []), ATOMIC_PERMISSIONS.DELETE]
716-
.filter((permission) => hasPermissions(this.share.permissions, permission))
718+
const permissionsList = [
719+
ATOMIC_PERMISSIONS.READ,
720+
...(this.isFolder ? [ATOMIC_PERMISSIONS.CREATE] : []),
721+
ATOMIC_PERMISSIONS.UPDATE,
722+
...(this.resharingIsPossible ? [ATOMIC_PERMISSIONS.SHARE] : []),
723+
...(this.isFolder ? [ATOMIC_PERMISSIONS.DELETE] : []),
724+
]
725+
726+
return permissionsList.filter((permission) => hasPermissions(this.share.permissions, permission))
717727
.map((permission, index) => index === 0
718728
? translatedPermissions[permission]
719729
: translatedPermissions[permission].toLocaleLowerCase(getLanguage()))
@@ -831,6 +841,13 @@ export default {
831841
isReshareChecked = this.canReshare,
832842
} = {}) {
833843
// calc permissions if checked
844+
845+
if (!this.isFolder && (isCreateChecked || isDeleteChecked)) {
846+
logger.debug('Ignoring create/delete permissions for file share — only available for folders')
847+
isCreateChecked = false
848+
isDeleteChecked = false
849+
}
850+
834851
const permissions = 0
835852
| (isReadChecked ? ATOMIC_PERMISSIONS.READ : 0)
836853
| (isCreateChecked ? ATOMIC_PERMISSIONS.CREATE : 0)

0 commit comments

Comments
 (0)