mirror of
https://github.com/haiwen/seahub.git
synced 2025-09-13 05:39:59 +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:
@@ -166,15 +166,28 @@ class DirOperationToolbar extends React.Component {
|
||||
let itemType = path === '/' ? 'library' : 'dir';
|
||||
let itemName = path == '/' ? repoName : Utils.getFolderName(path);
|
||||
|
||||
const { isCustomPermission, customPermission } = Utils.getUserPermission(userPerm);
|
||||
let canUpload = true;
|
||||
let canModify = true;
|
||||
if (isCustomPermission) {
|
||||
const { permission } = customPermission;
|
||||
canUpload = permission.upload;
|
||||
canModify = permission.modify;
|
||||
}
|
||||
|
||||
let content = null;
|
||||
if (Utils.isDesktop()) {
|
||||
let { showShareBtn } = this.props;
|
||||
content = (
|
||||
<Fragment>
|
||||
{Utils.isSupportUploadFolder() ?
|
||||
<button className="btn btn-secondary operation-item" title={gettext('Upload')} onClick={this.onUploadClick}>{gettext('Upload')}</button> :
|
||||
<button className="btn btn-secondary operation-item" title={gettext('Upload')} onClick={this.onUploadFile}>{gettext('Upload')}</button>}
|
||||
<button className="btn btn-secondary operation-item" title={gettext('New')} onClick={this.onCreateClick}>{gettext('New')}</button>
|
||||
{canUpload && (
|
||||
<Fragment>
|
||||
{Utils.isSupportUploadFolder() ?
|
||||
<button className="btn btn-secondary operation-item" title={gettext('Upload')} onClick={this.onUploadClick}>{gettext('Upload')}</button> :
|
||||
<button className="btn btn-secondary operation-item" title={gettext('Upload')} onClick={this.onUploadFile}>{gettext('Upload')}</button>}
|
||||
</Fragment>
|
||||
)}
|
||||
{canModify && <button className="btn btn-secondary operation-item" title={gettext('New')} onClick={this.onCreateClick}>{gettext('New')}</button>}
|
||||
{showShareBtn && <button className="btn btn-secondary operation-item" title={gettext('Share')} onClick={this.onShareClick}>{gettext('Share')}</button>}
|
||||
</Fragment>
|
||||
);
|
||||
@@ -183,9 +196,15 @@ class DirOperationToolbar extends React.Component {
|
||||
<Dropdown isOpen={this.state.isMobileOpMenuOpen} toggle={this.toggleMobileOpMenu}>
|
||||
<DropdownToggle tag="span" className="sf2-icon-plus mobile-toolbar-icon" />
|
||||
<DropdownMenu>
|
||||
<DropdownItem onClick={this.onUploadFile}>{gettext('Upload')}</DropdownItem>
|
||||
<DropdownItem onClick={this.onCreateFolderToggle}>{gettext('New Folder')}</DropdownItem>
|
||||
<DropdownItem onClick={this.onCreateFileToggle}>{gettext('New File')}</DropdownItem>
|
||||
{canUpload && (
|
||||
<DropdownItem onClick={this.onUploadFile}>{gettext('Upload')}</DropdownItem>
|
||||
)}
|
||||
{canModify && (
|
||||
<Fragment>
|
||||
<DropdownItem onClick={this.onCreateFolderToggle}>{gettext('New Folder')}</DropdownItem>
|
||||
<DropdownItem onClick={this.onCreateFileToggle}>{gettext('New File')}</DropdownItem>
|
||||
</Fragment>
|
||||
)}
|
||||
</DropdownMenu>
|
||||
</Dropdown>
|
||||
);
|
||||
@@ -193,7 +212,7 @@ class DirOperationToolbar extends React.Component {
|
||||
|
||||
return (
|
||||
<Fragment>
|
||||
{(userPerm === 'rw' || userPerm === 'admin') && (
|
||||
{(userPerm === 'rw' || userPerm === 'admin' || isCustomPermission) && (
|
||||
<div className="dir-operation">
|
||||
<div className="operation">
|
||||
{content}
|
||||
@@ -217,7 +236,7 @@ class DirOperationToolbar extends React.Component {
|
||||
)}
|
||||
</div>
|
||||
)}
|
||||
{Utils.isDesktop() && <ViewModeToolbar currentMode={this.props.currentMode} switchViewMode={this.props.switchViewMode} />}
|
||||
{Utils.isDesktop() && <ViewModeToolbar currentMode={this.props.currentMode} switchViewMode={this.props.switchViewMode} isCustomPermission={isCustomPermission} />}
|
||||
{this.state.isCreateFileDialogShow && (
|
||||
<ModalPortal>
|
||||
<CreateFile
|
||||
|
@@ -339,26 +339,39 @@ class MultipleDirOperationToolbar extends React.Component {
|
||||
|
||||
const { repoID, userPerm } = this.props;
|
||||
const dirent = this.props.selectedDirentList[0];
|
||||
const direntPath = this.getDirentPath(dirent);
|
||||
|
||||
let direntPath = this.getDirentPath(dirent);
|
||||
const { isCustomPermission, customPermission } = Utils.getUserPermission(userPerm);
|
||||
let canDelete = true;
|
||||
let canDownload = true;
|
||||
let canCopy = true;
|
||||
let canModify = true;
|
||||
if (isCustomPermission) {
|
||||
const { permission } = customPermission;
|
||||
canDelete = permission.delete;
|
||||
canDownload = permission.download;
|
||||
canCopy = permission.copy;
|
||||
canModify = permission.modify;
|
||||
}
|
||||
|
||||
return (
|
||||
<Fragment>
|
||||
<div className="dir-operation">
|
||||
<div className="d-flex">
|
||||
<ButtonGroup className="flex-row group-operations">
|
||||
{(userPerm === 'rw' || userPerm === 'admin') && (
|
||||
{(userPerm === 'rw' || userPerm === 'admin' || isCustomPermission) && (
|
||||
<Fragment>
|
||||
<Button className="secondary group-op-item action-icon sf2-icon-move" title={gettext('Move')} onClick={this.onMoveToggle}></Button>
|
||||
<Button className="secondary group-op-item action-icon sf2-icon-copy" title={gettext('Copy')} onClick={this.onCopyToggle}></Button>
|
||||
<Button className="secondary group-op-item action-icon sf2-icon-delete" title={gettext('Delete')} onClick={this.onItemsDelete}></Button>
|
||||
{canModify && <Button className="secondary group-op-item action-icon sf2-icon-move" title={gettext('Move')} onClick={this.onMoveToggle}></Button>}
|
||||
{canCopy && <Button className="secondary group-op-item action-icon sf2-icon-copy" title={gettext('Copy')} onClick={this.onCopyToggle}></Button>}
|
||||
{canDelete && <Button className="secondary group-op-item action-icon sf2-icon-delete" title={gettext('Delete')} onClick={this.onItemsDelete}></Button>}
|
||||
{canDownload && <Button className="secondary group-op-item action-icon sf2-icon-download" title={gettext('Download')} onClick={this.onItemsDownload}></Button>}
|
||||
</Fragment>
|
||||
)}
|
||||
{userPerm === 'r' && (
|
||||
<Button className="secondary group-op-item action-icon sf2-icon-copy" title={gettext('Copy')} onClick={this.onCopyToggle}></Button>
|
||||
)}
|
||||
{(userPerm === 'rw' || userPerm === 'admin' || userPerm === 'r') && (
|
||||
<Button className="secondary group-op-item action-icon sf2-icon-download" title={gettext('Download')} onClick={this.onItemsDownload}></Button>
|
||||
<Fragment>
|
||||
<Button className="secondary group-op-item action-icon sf2-icon-copy" title={gettext('Copy')} onClick={this.onCopyToggle}></Button>
|
||||
<Button className="secondary group-op-item action-icon sf2-icon-download" title={gettext('Download')} onClick={this.onItemsDownload}></Button>
|
||||
</Fragment>
|
||||
)}
|
||||
{this.props.selectedDirentList.length === 1 &&
|
||||
<ItemDropdownMenu
|
||||
@@ -372,7 +385,7 @@ class MultipleDirOperationToolbar extends React.Component {
|
||||
</ButtonGroup>
|
||||
</div>
|
||||
</div>
|
||||
{Utils.isDesktop() && <ViewModeToolbar currentMode={this.props.currentMode} switchViewMode={this.props.switchViewMode} />}
|
||||
{Utils.isDesktop() && <ViewModeToolbar currentMode={this.props.currentMode} switchViewMode={this.props.switchViewMode} isCustomPermission={isCustomPermission} />}
|
||||
{this.state.isMoveDialogShow &&
|
||||
<MoveDirentDialog
|
||||
path={this.props.path}
|
||||
|
@@ -5,10 +5,15 @@ import { gettext } from '../../utils/constants';
|
||||
const propTypes = {
|
||||
currentMode: PropTypes.string.isRequired,
|
||||
switchViewMode: PropTypes.func.isRequired,
|
||||
isCustomPermission: PropTypes.bool,
|
||||
};
|
||||
|
||||
class ViewModeToolbar extends React.Component {
|
||||
|
||||
static defaultProps = {
|
||||
isCustomPermission: false,
|
||||
}
|
||||
|
||||
switchViewMode = (e) => {
|
||||
e.preventDefault();
|
||||
let id = e.target.id;
|
||||
@@ -27,9 +32,11 @@ class ViewModeToolbar extends React.Component {
|
||||
<button className={`${baseClass} sf2-icon-grid-view ${this.props.currentMode === 'grid' ? 'current-mode' : ''}`} id='grid' title={gettext('Grid')} onClick={this.switchViewMode}></button>
|
||||
<button className={`${baseClass} sf2-icon-two-columns ${this.props.currentMode === 'column' ? 'current-mode' : ''}`} id='column' title={gettext('Column')} onClick={this.switchViewMode}></button>
|
||||
</div>
|
||||
<div className="detail-btn btn-group">
|
||||
<button className="btn btn-secondary btn-icon ml-1 fas fa-info" id='detail' title={gettext('Detail')} onClick={this.switchViewMode}></button>
|
||||
</div>
|
||||
{!this.props.isCustomPermission && (
|
||||
<div className="detail-btn btn-group">
|
||||
<button className="btn btn-secondary btn-icon ml-1 fas fa-info" id='detail' title={gettext('Detail')} onClick={this.switchViewMode}></button>
|
||||
</div>
|
||||
)}
|
||||
</React.Fragment>
|
||||
);
|
||||
}
|
||||
|
Reference in New Issue
Block a user