Web: Files: Fix canShare
This commit is contained in:
parent
1d4cabe5b9
commit
3ce5c1eb2d
@ -7,6 +7,7 @@ import { FileAction, AppServerConfig } from "@appserver/common/constants";
|
||||
import toastr from "studio/toastr";
|
||||
|
||||
import config from "../../package.json";
|
||||
import { canShare } from "../helpers/utils";
|
||||
|
||||
export default function withContextOptions(WrappedComponent) {
|
||||
class WithContextOptions extends React.Component {
|
||||
@ -225,9 +226,29 @@ export default function withContextOptions(WrappedComponent) {
|
||||
};
|
||||
|
||||
getFilesContextOptions = () => {
|
||||
const { item, t, isThirdPartyFolder } = this.props;
|
||||
const { access, contextOptions } = item;
|
||||
const isSharable = access !== 1 && access !== 0;
|
||||
const {
|
||||
item,
|
||||
t,
|
||||
isThirdPartyFolder,
|
||||
currentFolderId,
|
||||
currentFolderAccess,
|
||||
isDesktop,
|
||||
isPersonal,
|
||||
user,
|
||||
isAdmin,
|
||||
} = this.props;
|
||||
const { contextOptions } = item;
|
||||
|
||||
const isShareable = canShare(
|
||||
item,
|
||||
currentFolderId,
|
||||
currentFolderAccess,
|
||||
user,
|
||||
isAdmin,
|
||||
isDesktop,
|
||||
isPersonal
|
||||
);
|
||||
|
||||
return contextOptions.map((option) => {
|
||||
switch (option) {
|
||||
case "open":
|
||||
@ -291,7 +312,7 @@ export default function withContextOptions(WrappedComponent) {
|
||||
label: t("SharingSettings"),
|
||||
icon: "images/catalog.shared.react.svg",
|
||||
onClick: this.onClickShare,
|
||||
disabled: isSharable,
|
||||
disabled: !isShareable,
|
||||
};
|
||||
case "send-by-email":
|
||||
return {
|
||||
@ -509,11 +530,17 @@ export default function withContextOptions(WrappedComponent) {
|
||||
setDeleteDialogVisible,
|
||||
setUnsubscribe,
|
||||
} = dialogsStore;
|
||||
const { isTabletView, isDesktopClient } = auth.settingsStore;
|
||||
const { isTabletView, isDesktopClient, personal } = auth.settingsStore;
|
||||
const { isAdmin } = auth;
|
||||
const { user } = auth.userStore;
|
||||
const { setIsVerHistoryPanel, fetchFileVersions } = versionHistoryStore;
|
||||
const { setAction, type, extension, id } = fileActionStore;
|
||||
const { setMediaViewerData } = mediaViewerDataStore;
|
||||
const { isRootFolder } = selectedFolderStore;
|
||||
const {
|
||||
isRootFolder,
|
||||
id: currentFolderId,
|
||||
access: currentFolderAccess,
|
||||
} = selectedFolderStore;
|
||||
const { isRecycleBinFolder, isShare } = treeFoldersStore;
|
||||
|
||||
const isThirdPartyFolder = item.providerKey && isRootFolder;
|
||||
@ -554,6 +581,11 @@ export default function withContextOptions(WrappedComponent) {
|
||||
setDeleteDialogVisible,
|
||||
setUnsubscribe,
|
||||
isDesktop: isDesktopClient,
|
||||
currentFolderId,
|
||||
currentFolderAccess,
|
||||
isPersonal: personal,
|
||||
user,
|
||||
isAdmin,
|
||||
};
|
||||
}
|
||||
)(observer(WithContextOptions));
|
||||
|
@ -11,6 +11,7 @@ import { checkProtocol, createTreeFolders } from "../helpers/files-helpers";
|
||||
import { AppServerConfig } from "@appserver/common/constants";
|
||||
import { combineUrl } from "@appserver/common/utils";
|
||||
import config from "../../package.json";
|
||||
import { canShare } from "../helpers/utils";
|
||||
|
||||
const svgLoader = () => <div style={{ width: "24px" }}></div>;
|
||||
export default function withFileActions(WrappedFileItem) {
|
||||
@ -256,7 +257,7 @@ export default function withFileActions(WrappedFileItem) {
|
||||
item,
|
||||
isTrashFolder,
|
||||
draggable,
|
||||
canShare,
|
||||
//canShare,
|
||||
isPrivacy,
|
||||
actionType,
|
||||
actionExtension,
|
||||
@ -268,6 +269,11 @@ export default function withFileActions(WrappedFileItem) {
|
||||
isDesktop,
|
||||
personal,
|
||||
canWebEdit,
|
||||
canViewedDocs,
|
||||
currentFolderId,
|
||||
currentFolderAccess,
|
||||
user,
|
||||
isAdmin,
|
||||
} = this.props;
|
||||
const { fileExst, access, contentLength, id, shared } = item;
|
||||
|
||||
@ -282,19 +288,29 @@ export default function withFileActions(WrappedFileItem) {
|
||||
let value = fileExst || contentLength ? `file_${id}` : `folder_${id}`;
|
||||
value += draggable ? "_draggable" : "";
|
||||
|
||||
const isShareable = canShare(
|
||||
item,
|
||||
currentFolderId,
|
||||
currentFolderAccess,
|
||||
user,
|
||||
isAdmin,
|
||||
isDesktop,
|
||||
personal
|
||||
);
|
||||
|
||||
const isMobile = sectionWidth < 500;
|
||||
const displayShareButton = isMobile
|
||||
? "26px"
|
||||
: !canShare
|
||||
: !isShareable
|
||||
? "38px"
|
||||
: "96px";
|
||||
|
||||
const showShare = isPrivacy && (!isDesktop || !fileExst) ? false : true;
|
||||
//const showShare = isPrivacy && (!isDesktop || !fileExst) ? false : true;
|
||||
|
||||
const sharedButton =
|
||||
!canShare ||
|
||||
!showShare ||
|
||||
(personal && !canWebEdit) ||
|
||||
!isShareable ||
|
||||
//!showShare ||
|
||||
(personal && !canWebEdit && !canViewedDocs) ||
|
||||
isEdit ||
|
||||
id <= 0 ||
|
||||
isMobile
|
||||
@ -358,7 +374,11 @@ export default function withFileActions(WrappedFileItem) {
|
||||
addExpandedKeys,
|
||||
setExpandedKeys,
|
||||
} = treeFoldersStore;
|
||||
const { isRootFolder } = selectedFolderStore;
|
||||
const {
|
||||
isRootFolder,
|
||||
id: currentFolderId,
|
||||
access: currentFolderAccess,
|
||||
} = selectedFolderStore;
|
||||
const {
|
||||
dragging,
|
||||
setDragging,
|
||||
@ -366,7 +386,7 @@ export default function withFileActions(WrappedFileItem) {
|
||||
setTooltipPosition,
|
||||
setStartDrag,
|
||||
fileActionStore,
|
||||
canShare,
|
||||
//canShare,
|
||||
isFileSelected,
|
||||
filter,
|
||||
setIsLoading,
|
||||
@ -403,6 +423,9 @@ export default function withFileActions(WrappedFileItem) {
|
||||
const canWebEdit = docserviceStore.canWebEdit(item.fileExst);
|
||||
const canConvert = docserviceStore.canConvert(item.fileExst);
|
||||
|
||||
const { isAdmin } = auth;
|
||||
const { user } = auth.userStore;
|
||||
|
||||
return {
|
||||
t,
|
||||
item,
|
||||
@ -446,6 +469,10 @@ export default function withFileActions(WrappedFileItem) {
|
||||
setConvertDialogVisible,
|
||||
isDesktop: auth.settingsStore.isDesktopClient,
|
||||
personal: auth.settingsStore.personal,
|
||||
currentFolderId,
|
||||
currentFolderAccess,
|
||||
user,
|
||||
isAdmin,
|
||||
};
|
||||
}
|
||||
)(observer(WithFileActions));
|
||||
|
@ -1,11 +1,15 @@
|
||||
import authStore from "@appserver/common/store/AuthStore";
|
||||
import { AppServerConfig } from "@appserver/common/constants";
|
||||
import {
|
||||
AppServerConfig,
|
||||
FolderType,
|
||||
ShareAccessRights,
|
||||
} from "@appserver/common/constants";
|
||||
import config from "../../package.json";
|
||||
import { combineUrl } from "@appserver/common/utils";
|
||||
import {
|
||||
addFileToRecentlyViewed,
|
||||
} from "@appserver/common/api/files";
|
||||
import { addFileToRecentlyViewed } from "@appserver/common/api/files";
|
||||
import i18n from "./i18n";
|
||||
import { canViewedDocs } from "../store/DocserviceStore";
|
||||
|
||||
export const setDocumentTitle = (subTitle = null) => {
|
||||
const { isAuthenticated, settingsStore, product: currentModule } = authStore;
|
||||
const { organizationName } = settingsStore;
|
||||
@ -69,3 +73,148 @@ export const openDocEditor = async (
|
||||
tab ? (tab.location = url) : window.open(url, "_blank")
|
||||
);
|
||||
};
|
||||
|
||||
export const accessEdit = (
|
||||
entryData,
|
||||
currentFolderId,
|
||||
currentFolderAccess,
|
||||
user,
|
||||
isAdmin,
|
||||
isDesktop,
|
||||
|
||||
restrictedEditing
|
||||
) => {
|
||||
if (!entryData) throw "entryData is undefined";
|
||||
|
||||
if (user.isOutsider) return false;
|
||||
|
||||
if (entryData.isFolder) {
|
||||
if (entryData.id == FolderType.COMMON && !isAdmin) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (entryData.id == FolderType.SHARE) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (entryData.id == FolderType.Recent) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (entryData.id == FolderType.Favorites) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (entryData.id == FolderType.Templates) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (entryData.id == FolderType.TRASH) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (entryData.id == FolderType.Projects) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!isDesktop && entryData.rootFolderType == FolderType.Privacy) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
var curAccess = entryData.access;
|
||||
|
||||
if (
|
||||
entryData.isFolder &&
|
||||
currentFolderId &&
|
||||
currentFolderAccess &&
|
||||
entryData.id == currentFolderId
|
||||
) {
|
||||
curAccess = currentFolderAccess;
|
||||
}
|
||||
|
||||
switch (curAccess) {
|
||||
case ShareAccessRights.None:
|
||||
case ShareAccessRights.FullAccess:
|
||||
return true;
|
||||
case ShareAccessRights.ReadOnly:
|
||||
case ShareAccessRights.DenyAccess:
|
||||
return false;
|
||||
case ShareAccessRights.CustomFilter:
|
||||
case ShareAccessRights.Review:
|
||||
case ShareAccessRights.FormFilling:
|
||||
case ShareAccessRights.Comment:
|
||||
return !!restrictedEditing;
|
||||
default:
|
||||
if (
|
||||
entryData.isFolder &&
|
||||
(entryData.id === FolderType.SHARE ||
|
||||
entryData.id === FolderType.Recent ||
|
||||
entryData.id === FolderType.Favorites ||
|
||||
entryData.id === FolderType.Templates ||
|
||||
entryData.id === FolderType.Projects ||
|
||||
entryData.id === FolderType.TRASH)
|
||||
) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return isAdmin || entryData.createdBy == user.id;
|
||||
}
|
||||
};
|
||||
|
||||
export const canShare = (
|
||||
entryData,
|
||||
currentFolderId,
|
||||
currentFolderAccess,
|
||||
user,
|
||||
isAdmin,
|
||||
isDesktop,
|
||||
isPersonal
|
||||
) => {
|
||||
let isShareable = true;
|
||||
|
||||
if (!entryData.isFolder) {
|
||||
if (
|
||||
entryData.encrypted &&
|
||||
(entryData.rootFolderType != FolderType.Privacy ||
|
||||
!isDesktop ||
|
||||
//!ASC.Desktop.encryptionSupport() ||
|
||||
isPersonal)
|
||||
) {
|
||||
isShareable = false;
|
||||
} else if (isPersonal && !canViewedDocs(entryData.fileExst)) {
|
||||
isShareable = false;
|
||||
}
|
||||
}
|
||||
|
||||
if (
|
||||
isShareable &&
|
||||
((entryData.rootFolderType == FolderType.SHARE &&
|
||||
!accessEdit(
|
||||
entryData,
|
||||
currentFolderId,
|
||||
currentFolderAccess,
|
||||
user,
|
||||
isAdmin,
|
||||
isDesktop
|
||||
)) ||
|
||||
(entryData.rootFolderType == FolderType.Privacy &&
|
||||
(entryData.isFolder ||
|
||||
!accessEdit(
|
||||
entryData,
|
||||
currentFolderId,
|
||||
currentFolderAccess,
|
||||
user,
|
||||
isAdmin,
|
||||
isDesktop
|
||||
))) ||
|
||||
(isPersonal && entryData.isFolder) ||
|
||||
user.isVisitor)
|
||||
) {
|
||||
isShareable = false;
|
||||
}
|
||||
|
||||
//console.log("entry", entryData, "isShareable", isShareable);
|
||||
|
||||
return isShareable;
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user