Browse Source

Hide some actions based on node permissions and share attributes

Signed-off-by: Louis Chemineau <louis@chmn.me>

Signed-off-by: nextcloud-command <nextcloud-command@users.noreply.github.com>
Louis Chemineau 3 tháng trước cách đây
mục cha
commit
986459e1e4

+ 35 - 4
apps/files_versions/src/components/Version.vue

@@ -46,7 +46,7 @@
 			</div>
 		</template>
 		<template #actions>
-			<NcActionButton v-if="enableLabeling"
+			<NcActionButton v-if="enableLabeling && hasUpdatePermissions"
 				:close-after-click="true"
 				@click="labelUpdate">
 				<template #icon>
@@ -62,7 +62,7 @@
 				</template>
 				{{ t('files_versions', 'Compare to current version') }}
 			</NcActionButton>
-			<NcActionButton v-if="!isCurrent"
+			<NcActionButton v-if="!isCurrent && hasUpdatePermissions"
 				:close-after-click="true"
 				@click="restoreVersion">
 				<template #icon>
@@ -70,7 +70,8 @@
 				</template>
 				{{ t('files_versions', 'Restore version') }}
 			</NcActionButton>
-			<NcActionLink :href="downloadURL"
+			<NcActionLink v-if="isDownloadable"
+				:href="downloadURL"
 				:close-after-click="true"
 				:download="downloadURL">
 				<template #icon>
@@ -78,7 +79,7 @@
 				</template>
 				{{ t('files_versions', 'Download version') }}
 			</NcActionLink>
-			<NcActionButton v-if="!isCurrent && enableDeletion"
+			<NcActionButton v-if="!isCurrent && enableDeletion && hasDeletePermissions"
 				:close-after-click="true"
 				@click="deleteVersion">
 				<template #icon>
@@ -106,6 +107,9 @@ import { translate as t } from '@nextcloud/l10n'
 import { joinPaths } from '@nextcloud/paths'
 import { getRootUrl } from '@nextcloud/router'
 import { loadState } from '@nextcloud/initial-state'
+import { Permission } from '@nextcloud/files'
+
+import { hasPermissions } from '../../../files_sharing/src/lib/SharePermissionsToolBox.js'
 
 export default {
 	name: 'Version',
@@ -224,6 +228,33 @@ export default {
 		enableDeletion() {
 			return this.capabilities.files.version_deletion === true
 		},
+
+		/** @return {boolean} */
+		hasDeletePermissions() {
+			return hasPermissions(this.fileInfo.permissions, Permission.DELETE)
+		},
+
+		/** @return {boolean} */
+		hasUpdatePermissions() {
+			return hasPermissions(this.fileInfo.permissions, Permission.UPDATE)
+		},
+
+		/** @return {boolean} */
+		isDownloadable() {
+			if ((this.fileInfo.permissions & Permission.READ) === 0) {
+				return false
+			}
+
+			// If the mount type is a share, ensure it got download permissions.
+			if (this.fileInfo.mountType === 'shared') {
+				const downloadAttribute = this.fileInfo.shareAttributes.find((attribute) => attribute.scope === 'permissions' && attribute.key === 'download')
+				if (downloadAttribute !== undefined && downloadAttribute.enabled === false) {
+					return false
+				}
+			}
+
+			return true
+		},
 	},
 	methods: {
 		labelUpdate() {

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
dist/files_versions-files_versions.js


+ 22 - 0
dist/files_versions-files_versions.js.LICENSE.txt

@@ -61,6 +61,28 @@
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
  */
 
+/**
+ * @copyright 2022 Louis Chmn <louis@chmn.me>
+ *
+ * @author Louis Chmn <louis@chmn.me>
+ *
+ * @license AGPL-3.0-or-later
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
 /**
  * @copyright Copyright (c) 2021 John Molakvoæ <skjnldsv@protonmail.com>
  *

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
dist/files_versions-files_versions.js.map


Một số tệp đã không được hiển thị bởi vì quá nhiều tập tin thay đổi trong này khác