1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-09-05 00:43:53 +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

@@ -1,7 +1,7 @@
import React, { Fragment } from 'react';
import PropTypes from 'prop-types';
import { Modal, ModalHeader, ModalBody, TabContent, TabPane, Nav, NavItem, NavLink } from 'reactstrap';
import { gettext, username, canGenerateShareLink, canGenerateUploadLink, canInvitePeople, additionalShareDialogNote, enableOCM } from '../../utils/constants';
import { gettext, username, canGenerateShareLink, canGenerateUploadLink, canInvitePeople, additionalShareDialogNote, enableOCM, isPro } from '../../utils/constants';
import ShareToUser from './share-to-user';
import ShareToGroup from './share-to-group';
import ShareToInvitePeople from './share-to-invite-people';
@@ -13,6 +13,8 @@ import { seafileAPI } from '../../utils/seafile-api';
import Loading from '../loading';
import { Utils } from '../../utils/utils';
import toaster from '../toast';
import CustomPermissionManager from './custom-permission/custom-permission-manager';
import '../../css/share-link-dialog.css';
const propTypes = {
@@ -79,6 +81,10 @@ class ShareDialog extends React.Component {
}
}
onAddCustomPermissionToggle = () => {
this.toggle('customSharePermission');
}
renderDirContent = () => {
if (!this.state.isRepoJudgemented) {
@@ -96,6 +102,8 @@ class ShareDialog extends React.Component {
enableDirPrivateShare = itemType == 'library';
}
const { isCustomPermission } = Utils.getUserPermission(userPerm);
return (
<Fragment>
<div className="share-dialog-side">
@@ -133,6 +141,13 @@ class ShareDialog extends React.Component {
{gettext('Share to group')}
</NavLink>
</NavItem>
{isPro && !isCustomPermission && (
<NavItem>
<NavLink className={activeTab === 'customSharePermission' ? 'active' : ''} onClick={this.toggle.bind(this, 'customSharePermission')}>
{gettext('Custom sharing permissions')}
</NavLink>
</NavItem>
)}
{canInvitePeople &&
<NavItem>
<NavLink className={activeTab === 'invitePeople' ? 'active' : ''} onClick={this.toggle.bind(this, 'invitePeople')}>
@@ -184,12 +199,26 @@ class ShareDialog extends React.Component {
<Fragment>
{activeTab === 'shareToUser' &&
<TabPane tabId="shareToUser">
<ShareToUser itemType={this.props.itemType} isGroupOwnedRepo={this.props.isGroupOwnedRepo} itemPath={this.props.itemPath} repoID={this.props.repoID} isRepoOwner={this.state.isRepoOwner} />
<ShareToUser
itemType={this.props.itemType}
isGroupOwnedRepo={this.props.isGroupOwnedRepo}
itemPath={this.props.itemPath}
repoID={this.props.repoID}
isRepoOwner={this.state.isRepoOwner}
onAddCustomPermissionToggle={this.onAddCustomPermissionToggle}
/>
</TabPane>
}
{activeTab === 'shareToGroup' &&
<TabPane tabId="shareToGroup">
<ShareToGroup itemType={this.props.itemType} isGroupOwnedRepo={this.props.isGroupOwnedRepo} itemPath={this.props.itemPath} repoID={this.props.repoID} isRepoOwner={this.state.isRepoOwner} />
<ShareToGroup
itemType={this.props.itemType}
isGroupOwnedRepo={this.props.isGroupOwnedRepo}
itemPath={this.props.itemPath}
repoID={this.props.repoID}
isRepoOwner={this.state.isRepoOwner}
onAddCustomPermissionToggle={this.onAddCustomPermissionToggle}
/>
</TabPane>
}
{(canInvitePeople && activeTab === 'invitePeople') &&
@@ -199,6 +228,11 @@ class ShareDialog extends React.Component {
}
</Fragment>
}
{isPro && activeTab === 'customSharePermission' && (
<TabPane tabId="customSharePermission">
<CustomPermissionManager repoID={this.props.repoID}/>
</TabPane>
)}
{enableOCM && itemType === 'library' && activeTab === 'shareToOtherServer' &&
<TabPane tabId="shareToOtherServer">
<ShareToOtherServer itemType={this.props.itemType} isGroupOwnedRepo={this.props.isGroupOwnedRepo} itemPath={this.props.itemPath} repoID={this.props.repoID} isRepoOwner={this.state.isRepoOwner} />
@@ -212,7 +246,7 @@ class ShareDialog extends React.Component {
renderFileContent = () => {
let activeTab = this.state.activeTab;
const { itemType, itemName, repoEncrypted } = this.props;
const { itemType, itemName, repoEncrypted, userPerm } = this.props;
const enableShareLink = !repoEncrypted && canGenerateShareLink;
return (
@@ -242,6 +276,7 @@ class ShareDialog extends React.Component {
repoID={this.props.repoID}
closeShareDialog={this.props.toggleDialog}
itemType={itemType}
userPerm={userPerm}
/>
</TabPane>
}