1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-09-16 15:19:06 +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

@@ -6,6 +6,8 @@ import { gettext, siteRoot } from '../../utils/constants';
import { Utils } from '../../utils/utils';
import ModalPortal from '../modal-portal';
import ShareDialog from '../dialog/share-dialog';
import { seafileAPI } from '../../utils/seafile-api';
import toaster from '../toast';
const propTypes = {
isLocked: PropTypes.bool.isRequired,
@@ -32,12 +34,33 @@ class FileToolbar extends React.Component {
constructor(props) {
super(props);
this.state = {
isLoading: true,
dropdownOpen: false,
moreDropdownOpen: false,
isShareDialogOpen: false,
};
}
async componentDidMount() {
if (filePerm && filePerm.startsWith('custom-')) {
this.isCustomPermission = true;
const permissionID = filePerm.split('-')[1];
try {
const permissionRes = await seafileAPI.getCustomPermission(repoID, permissionID);
this.customPermission = permissionRes.data.permission;
// share dialog need a global custom_permission
window.custom_permission = this.customPermission;
this.setState({isLoading: false});
} catch(error) {
let errorMsg = Utils.getErrorMsg(error);
toaster.danger(errorMsg);
this.setState({isLoading: false});
}
} else {
this.setState({isLoading: false});
}
}
toggleShareDialog = () => {
this.setState({isShareDialogOpen: !this.state.isShareDialogOpen});
}
@@ -55,6 +78,10 @@ class FileToolbar extends React.Component {
}
render() {
if (this.state.isLoading) {
return null;
}
const { isLocked, lockedByMe } = this.props;
const { moreDropdownOpen } = this.state;
let showLockUnlockBtn = false;
@@ -78,6 +105,14 @@ class FileToolbar extends React.Component {
showShareBtn = true;
}
let canComment = enableComment;
const { isCustomPermission, customPermission } = this;
if (isCustomPermission) {
const { download_external_link } = customPermission.permission;
showShareBtn = download_external_link;
canComment = false;
}
return (
<Fragment>
<ButtonGroup className="d-none d-md-block">
@@ -153,7 +188,7 @@ class FileToolbar extends React.Component {
<span className="fas fa-ellipsis-v"></span>
</DropdownToggle>
<DropdownMenu right={true}>
{enableComment && (
{canComment && (
<DropdownItem onClick={this.props.toggleCommentPanel}>
{gettext('Comment')}
</DropdownItem>
@@ -192,8 +227,7 @@ class FileToolbar extends React.Component {
)}
</ButtonGroup>
<DropdownToggle className="sf2-icon-more mx-1" aria-label={gettext('More Operations')}>
</DropdownToggle>
<DropdownToggle className="sf2-icon-more mx-1" aria-label={gettext('More Operations')}></DropdownToggle>
<DropdownMenu right={true}>
<DropdownItem>
<a href={`${siteRoot}library/${repoID}/${Utils.encodePath(repoName + parentDir)}`} className="text-inherit">
@@ -224,7 +258,7 @@ class FileToolbar extends React.Component {
</a>
</DropdownItem>
)}
{enableComment && (
{canComment && (
<DropdownItem onClick={this.props.toggleCommentPanel}>
{gettext('Comment')}
</DropdownItem>
@@ -233,19 +267,19 @@ class FileToolbar extends React.Component {
</DropdownMenu>
</Dropdown>
{this.state.isShareDialogOpen &&
<ModalPortal>
<ShareDialog
itemType='file'
itemName={fileName}
itemPath={filePath}
userPerm={filePerm}
repoID={repoID}
repoEncrypted={repoEncrypted}
toggleDialog={this.toggleShareDialog}
/>
</ModalPortal>
}
{this.state.isShareDialogOpen && (
<ModalPortal>
<ShareDialog
itemType='file'
itemName={fileName}
itemPath={filePath}
userPerm={filePerm}
repoID={repoID}
repoEncrypted={repoEncrypted}
toggleDialog={this.toggleShareDialog}
/>
</ModalPortal>
)}
</Fragment>
);
}