1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-09-03 16:10:26 +00:00

custom share permission (#4967)

* custom share permission

* remove path field

* add permission manager ui

* optimize custom permission manager style

* add permission setting

* add normalize_custom_permission_name

* optimize repo custom permission

* delete useless code

* optimize code

* optimize code

* optimize markdown file page

* fix a few bugs

* add permission control

* repair modify permission

* optimize style

* optimize copyright

* add try-except

* optimize code

* move file&folder

* batch operation item

* repair batch move item

* update copyright

* optimize move permission control

* optimize code

* optimize code

* optimize code & fix code wranning

* optimize code

* delete unsupport permission

* optimize code

* repair code bug

* add pro limit

* optimize code

* add permission handle for permission editor

* repair new file&folder bug

* optimize file uploader code

* custom permission user can not visit custom permission module

* optimize code

* forbid comment&detail module

* optimize code

* optimize modify/preview permission

* optimize custom permission share perm

* optimize view file module: file-toolbar

* optimize custom drag move operation

* repair column view bug

* optimize drag operation code

* repair code bug

* optimize code

Co-authored-by: shanshuirenjia <978987373@qq.com>
This commit is contained in:
王健辉
2021-09-13 10:37:07 +08:00
committed by GitHub
parent 1f68680257
commit 07df610e43
60 changed files with 1965 additions and 287 deletions

View File

@@ -121,10 +121,17 @@ export const Utils = {
getShareLinkPermissionList: function(itemType, permission, path, canEdit) {
// itemType: library, dir, file
// permission: rw, r, admin, cloud-edit, preview
// permission: rw, r, admin, cloud-edit, preview, custom-*
let permissionOptions = [];
const { isCustomPermission } = Utils.getUserPermission(permission);
if (isCustomPermission) {
permissionOptions.push('preview_download');
permissionOptions.push('preview_only');
return permissionOptions;
}
if (permission == 'rw' || permission == 'admin' || permission == 'r') {
permissionOptions.push('preview_download');
}
@@ -454,9 +461,14 @@ export const Utils = {
let list = [];
const { SHARE, DOWNLOAD, DELETE, RENAME, MOVE, COPY, PERMISSION, OPEN_VIA_CLIENT } = TextTranslation;
const permission = dirent.permission;
const { isCustomPermission, customPermission } = Utils.getUserPermission(permission);
if (isContextmenu) {
if (permission == 'rw' || permission == 'r') {
list.push(DOWNLOAD);
}
if (isCustomPermission && customPermission.permission.download) {
list.push(DOWNLOAD);
}
@@ -467,10 +479,29 @@ export const Utils = {
if (permission == 'rw') {
list.push(DELETE, 'Divider');
}
if (isCustomPermission && customPermission.permission.delete) {
list.push(DELETE, 'Divider');
}
}
if (permission == 'rw') {
list.push(RENAME, MOVE);
}
if (isCustomPermission && customPermission.permission.modify) {
list.push(RENAME, MOVE);
}
if (permission == 'rw') {
list.push(COPY);
}
if (isCustomPermission && customPermission.permission.copy) {
list.push(COPY);
}
if (permission == 'rw') {
list.push(RENAME, MOVE, COPY);
if (folderPermEnabled && ((isRepoOwner && currentRepoInfo.has_been_shared_out) || currentRepoInfo.is_admin)) {
list.push('Divider', PERMISSION);
}
@@ -481,6 +512,11 @@ export const Utils = {
list.push(COPY);
}
// if the last item of menuList is Divider, delete the last item
if (list[list.length - 1] === 'Divider') {
list.pop();
}
return list;
},
@@ -489,11 +525,16 @@ export const Utils = {
const { SHARE, DOWNLOAD, DELETE, RENAME, MOVE, COPY, TAGS, UNLOCK, LOCK,
COMMENT, HISTORY, ACCESS_LOG, OPEN_VIA_CLIENT } = TextTranslation;
const permission = dirent.permission;
const { isCustomPermission, customPermission } = Utils.getUserPermission(permission);
if (isContextmenu) {
if (permission == 'rw' || permission == 'r') {
list.push(DOWNLOAD);
}
if (isCustomPermission && customPermission.permission.download) {
list.push(DOWNLOAD);
}
if (Utils.isHasPermissionToShare(currentRepoInfo, permission, dirent)) {
list.push(SHARE);
@@ -503,17 +544,41 @@ export const Utils = {
if (!dirent.is_locked || (dirent.is_locked && dirent.locked_by_me)) {
list.push(DELETE);
}
list.push('Divider');
}
if (isCustomPermission && customPermission.permission.delete) {
if (!dirent.is_locked || (dirent.is_locked && dirent.locked_by_me)) {
list.push(DELETE);
}
list.push('Divider');
}
list.push('Divider');
}
if (permission == 'rw') {
if (!dirent.is_locked || (dirent.is_locked && dirent.locked_by_me)) {
list.push(RENAME, MOVE);
}
list.push(COPY, TAGS);
}
if (isCustomPermission && customPermission.permission.modify) {
if (!dirent.is_locked || (dirent.is_locked && dirent.locked_by_me)) {
list.push(RENAME, MOVE);
}
}
if (permission == 'rw') {
list.push(COPY);
}
if (isCustomPermission) {
if (customPermission.permission.copy) {
list.push(COPY);
}
}
if (permission == 'rw') {
list.push(TAGS);
if (isPro) {
if (dirent.is_locked) {
if (dirent.locked_by_me || dirent.lock_owner == 'OnlineOffice' || isRepoOwner || currentRepoInfo.is_admin) {
@@ -545,6 +610,11 @@ export const Utils = {
list.push(HISTORY);
}
// if the last item of menuList is Divider, delete the last item
if (list[list.length - 1] === 'Divider') {
list.pop();
}
return list;
},
@@ -1269,6 +1339,12 @@ export const Utils = {
*/
isHasPermissionToShare: function(repoInfo, userDirPermission, dirent) {
const { isCustomPermission, customPermission } = Utils.getUserPermission(userDirPermission);
if (isCustomPermission) {
const { download_external_link } = customPermission.permission;
return download_external_link;
}
let { is_admin: isAdmin, is_virtual: isVirtual, encrypted: repoEncrypted, owner_email: ownerEmail } = repoInfo;
let isRepoOwner = ownerEmail === username;
@@ -1381,5 +1457,35 @@ export const Utils = {
}
return level;
},
getSharedPermission(item) {
let permission = item.permission;
if (item.is_admin) {
permission = 'admin';
}
if (item.permission.startsWith('custom-')) {
permission = item.permission.slice(7);
}
return permission;
},
getUserPermission(userPerm) {
const { custom_permission } = window;
const common_permissions = ['rw', 'r', 'admin', 'cloud-edit', 'preview'];
// visit the shared repo(virtual repo) by custom permission
if (!custom_permission || common_permissions.indexOf(userPerm) > -1) {
return { isCustomPermission: false };
}
// userPerm is startsWith 'custom-'
if (custom_permission) {
const permissionId = custom_permission.id;
const userPermId = parseInt(userPerm.split('-')[1]);
if (permissionId === userPermId) {
return { isCustomPermission: true, customPermission: custom_permission };
}
// TODO user set custom permission on folder
}
return { isCustomPermission: false };
}
};