Skip to content

Commit fb057de

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 0ccc048 commit fb057de

File tree

2 files changed

+25
-1
lines changed

2 files changed

+25
-1
lines changed

apps/files_sharing/src/mixins/ShareDetails.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
import Share from '../models/Share.js'
22
import Config from '../services/ConfigService.js'
3+
import { ATOMIC_PERMISSIONS } from '../lib/SharePermissionsToolBox.js'
4+
import logger from '../services/logger.ts'
35

46
export default {
57
methods: {
@@ -21,6 +23,18 @@ export default {
2123
share = this.mapShareRequestToShareObject(shareRequestObject)
2224
}
2325

26+
if (this.fileInfo.type !== 'dir') {
27+
const originalPermissions = share.permissions
28+
const strippedPermissions = originalPermissions
29+
& ~ATOMIC_PERMISSIONS.CREATE
30+
& ~ATOMIC_PERMISSIONS.DELETE
31+
32+
if (originalPermissions !== strippedPermissions) {
33+
logger.debug('Removed create/delete permissions from file share (only valid for folders)')
34+
share.permissions = strippedPermissions
35+
}
36+
}
37+
2438
const shareDetails = {
2539
fileInfo: this.fileInfo,
2640
share,

apps/files_sharing/src/views/SharingDetailsTab.vue

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434
<NcCheckboxRadioSwitch :button-variant="true"
3535
data-cy-files-sharing-share-permissions-bundle="upload-edit"
3636
:checked.sync="sharingPermission"
37-
:value="bundledPermissions.ALL.toString()"
37+
:value="allPermissions"
3838
name="sharing_permission_radio"
3939
type="radio"
4040
button-variant-grouped="vertical"
@@ -370,6 +370,9 @@ export default {
370370
}
371371
}
372372
},
373+
allPermissions() {
374+
return this.isFolder ? this.bundledPermissions.ALL.toString() : this.bundledPermissions.ALL_FILE.toString()
375+
},
373376
/**
374377
* Can the sharee edit the shared file ?
375378
*/
@@ -734,6 +737,13 @@ export default {
734737
isReshareChecked = this.canReshare,
735738
} = {}) {
736739
// calc permissions if checked
740+
741+
if (!this.isFolder && (isCreateChecked || isDeleteChecked)) {
742+
logger.debug('Ignoring create/delete permissions for file share — only available for folders')
743+
isCreateChecked = false
744+
isDeleteChecked = false
745+
}
746+
737747
const permissions = 0
738748
| (isReadChecked ? ATOMIC_PERMISSIONS.READ : 0)
739749
| (isCreateChecked ? ATOMIC_PERMISSIONS.CREATE : 0)

0 commit comments

Comments
 (0)