1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-09-05 00:43:53 +00:00

Merge pull request #3476 from haiwen/folder-perm

Folder perm
This commit is contained in:
Daniel Pan
2019-05-17 10:09:42 +08:00
committed by GitHub
4 changed files with 62 additions and 24 deletions

View File

@@ -11,6 +11,7 @@ import '../../css/sub-folder-permission.css';
const propTypes = { const propTypes = {
repoID: PropTypes.string.isRequired, repoID: PropTypes.string.isRequired,
repoName: PropTypes.string, repoName: PropTypes.string,
isDepartmentRepo: PropTypes.bool,
folderPath: PropTypes.string, folderPath: PropTypes.string,
folderName: PropTypes.string, folderName: PropTypes.string,
toggleDialog: PropTypes.func.isRequired toggleDialog: PropTypes.func.isRequired
@@ -52,10 +53,10 @@ class LibSubFolderPermissionDialog extends React.Component {
<div className="share-dialog-main"> <div className="share-dialog-main">
<TabContent activeTab={this.state.activeTab}> <TabContent activeTab={this.state.activeTab}>
<TabPane tabId="userPermission"> <TabPane tabId="userPermission">
<LibSubFolderSetUserPermissionDialog repoID={this.props.repoID} repoName={this.props.repoName} folderPath={this.props.folderPath} /> <LibSubFolderSetUserPermissionDialog repoID={this.props.repoID} repoName={this.props.repoName} folderPath={this.props.folderPath} isDepartmentRepo={this.props.isDepartmentRepo} />
</TabPane> </TabPane>
<TabPane tabId="groupPermission"> <TabPane tabId="groupPermission">
<LibSubFolderSetGroupPermissionDialog repoID={this.props.repoID} repoName={this.props.repoName} folderPath={this.props.folderPath} /> <LibSubFolderSetGroupPermissionDialog repoID={this.props.repoID} repoName={this.props.repoName} folderPath={this.props.folderPath} isDepartmentRepo={this.props.isDepartmentRepo} />
</TabPane> </TabPane>
</TabContent> </TabContent>
</div> </div>

View File

@@ -71,7 +71,8 @@ class GroupItem extends React.Component {
} }
const propTypes = { const propTypes = {
repoID: PropTypes.string.isRequired repoID: PropTypes.string.isRequired,
isDepartmentRepo: PropTypes.bool
}; };
const NoOptionsMessage = (props) => { const NoOptionsMessage = (props) => {
@@ -122,9 +123,11 @@ class LibSubFolderSerGroupPermissionDialog extends React.Component {
} }
listGroupPermissionItems = () => { listGroupPermissionItems = () => {
let repoID = this.props.repoID; const { isDepartmentRepo, repoID, folderPath } = this.props;
let folderPath = this.props.folderPath; const request = isDepartmentRepo ?
seafileAPI.listGroupFolderPerm(repoID, folderPath).then((res) => { seafileAPI.listDepartmentRepoGroupFolderPerm(repoID, folderPath) :
seafileAPI.listGroupFolderPerm(repoID, folderPath);
request.then((res) => {
if (res.data.length !== 0) { if (res.data.length !== 0) {
this.setState({ this.setState({
groupPermissionItems: res.data groupPermissionItems: res.data
@@ -144,7 +147,10 @@ class LibSubFolderSerGroupPermissionDialog extends React.Component {
return false; return false;
} }
seafileAPI.addGroupFolderPerm(this.props.repoID, this.state.permission, folderPath, selectedOption.id).then(res => { const request = this.props.isDepartmentRepo ?
seafileAPI.addDepartmentRepoGroupFolderPerm(this.props.repoID, this.state.permission, folderPath, selectedOption.id) :
seafileAPI.addGroupFolderPerm(this.props.repoID, this.state.permission, folderPath, selectedOption.id)
request.then(res => {
let errorMsg = []; let errorMsg = [];
if (res.data.failed.length > 0) { if (res.data.failed.length > 0) {
for (let i = 0; i < res.data.failed.length; i++) { for (let i = 0; i < res.data.failed.length; i++) {
@@ -177,7 +183,10 @@ class LibSubFolderSerGroupPermissionDialog extends React.Component {
} }
deleteGroupPermissionItem = (item) => { deleteGroupPermissionItem = (item) => {
seafileAPI.deleteGroupFolderPerm(item.repo_id, item.permission, item.folder_path, item.group_id).then(() => { const request = this.props.isDepartmentRepo ?
seafileAPI.deleteDepartmentRepoGroupFolderPerm(item.repo_id, item.permission, item.folder_path, item.group_id) :
seafileAPI.deleteGroupFolderPerm(item.repo_id, item.permission, item.folder_path, item.group_id)
request.then(() => {
this.setState({ this.setState({
groupPermissionItems: this.state.groupPermissionItems.filter(deletedItem => { return deletedItem != item; }) groupPermissionItems: this.state.groupPermissionItems.filter(deletedItem => { return deletedItem != item; })
}); });
@@ -185,7 +194,10 @@ class LibSubFolderSerGroupPermissionDialog extends React.Component {
} }
onChangeGroupPermission = (item, permission) => { onChangeGroupPermission = (item, permission) => {
seafileAPI.updateGroupFolderPerm(item.repo_id, permission, item.folder_path, item.group_id).then(() => { const request = this.props.isDepartmentRepo ?
seafileAPI.updateDepartmentRepoGroupFolderPerm(item.repo_id, permission, item.folder_path, item.group_id) :
seafileAPI.updateGroupFolderPerm(item.repo_id, permission, item.folder_path, item.group_id);
request.then(() => {
this.updateGroupPermission(item, permission); this.updateGroupPermission(item, permission);
}); });
} }

View File

@@ -72,7 +72,8 @@ class UserItem extends React.Component {
const propTypes = { const propTypes = {
repoID: PropTypes.string.isRequired repoID: PropTypes.string.isRequired,
isDepartmentRepo: PropTypes.bool
}; };
@@ -100,9 +101,11 @@ class LibSubFolderSetUserPermissionDialog extends React.Component {
} }
componentDidMount() { componentDidMount() {
let repoID = this.props.repoID; const {repoID, folderPath, isDepartmentRepo} = this.props;
let folderPath = this.props.folderPath; const request = isDepartmentRepo ?
seafileAPI.listUserFolderPerm(repoID, folderPath).then((res) => { seafileAPI.listDepartmentRepoUserFolderPerm(repoID, folderPath) :
seafileAPI.listUserFolderPerm(repoID, folderPath);
request.then((res) => {
if (res.data.length !== 0) { if (res.data.length !== 0) {
this.setState({userFolderPermItems: res.data}); this.setState({userFolderPermItems: res.data});
} }
@@ -121,7 +124,11 @@ class LibSubFolderSetUserPermissionDialog extends React.Component {
} }
const users = selectedUsers.map((item, index) => item.email); const users = selectedUsers.map((item, index) => item.email);
seafileAPI.addUserFolderPerm(this.props.repoID, this.state.permission, folderPath, users).then(res => {
const request = this.props.isDepartmentRepo ?
seafileAPI.addDepartmentRepoUserFolderPerm(this.props.repoID, this.state.permission, folderPath, users) :
seafileAPI.addUserFolderPerm(this.props.repoID, this.state.permission, folderPath, users);
request.then(res => {
let errorMsg = []; let errorMsg = [];
if (res.data.failed.length > 0) { if (res.data.failed.length > 0) {
for (let i = 0; i < res.data.failed.length; i++) { for (let i = 0; i < res.data.failed.length; i++) {
@@ -154,7 +161,10 @@ class LibSubFolderSetUserPermissionDialog extends React.Component {
} }
deleteUserFolderPermItem = (item) => { deleteUserFolderPermItem = (item) => {
seafileAPI.deleteUserFolderPerm(item.repo_id, item.permission, item.folder_path, item.user_email).then(res => { const request = this.props.isDepartmentRepo ?
seafileAPI.deleteDepartmentRepoUserFolderPerm(item.repo_id, item.permission, item.folder_path, item.user_email) :
seafileAPI.deleteUserFolderPerm(item.repo_id, item.permission, item.folder_path, item.user_email);
request.then(res => {
this.setState({ this.setState({
userFolderPermItems: this.state.userFolderPermItems.filter(deletedItem => { userFolderPermItems: this.state.userFolderPermItems.filter(deletedItem => {
return deletedItem != item; return deletedItem != item;
@@ -164,7 +174,10 @@ class LibSubFolderSetUserPermissionDialog extends React.Component {
} }
onChangeUserFolderPerm = (repoID, permission, folderPath, userEmail) => { onChangeUserFolderPerm = (repoID, permission, folderPath, userEmail) => {
seafileAPI.updateUserFolderPerm(repoID, permission, folderPath, userEmail).then(res => { const request = this.props.isDepartmentRepo ?
seafileAPI.updateDepartmentRepoUserFolderPerm(repoID, permission, folderPath, userEmail) :
seafileAPI.updateUserFolderPerm(repoID, permission, folderPath, userEmail);
request.then(res => {
let userFolderPermItems = this.state.userFolderPermItems.map(item => { let userFolderPermItems = this.state.userFolderPermItems.map(item => {
if (item.user_email === userEmail && item.folder_path === folderPath) { if (item.user_email === userEmail && item.folder_path === folderPath) {
item.permission = permission; item.permission = permission;

View File

@@ -5,8 +5,9 @@ import { Dropdown, DropdownMenu, DropdownToggle, DropdownItem } from 'reactstrap
import { Link } from '@reach/router'; import { Link } from '@reach/router';
import { Utils } from '../../utils/utils'; import { Utils } from '../../utils/utils';
import { gettext, siteRoot, isPro, username, folderPermEnabled, isSystemStaff } from '../../utils/constants'; import { gettext, siteRoot, isPro, username, folderPermEnabled, isSystemStaff } from '../../utils/constants';
import ModalPotal from '../../components/modal-portal'; import ModalPortal from '../../components/modal-portal';
import ShareDialog from '../../components/dialog/share-dialog'; import ShareDialog from '../../components/dialog/share-dialog';
import LibSubFolderPermissionDialog from '../../components/dialog/lib-sub-folder-permission-dialog';
import Rename from '../rename'; import Rename from '../rename';
import { seafileAPI } from '../../utils/seafile-api'; import { seafileAPI } from '../../utils/seafile-api';
@@ -34,6 +35,7 @@ class SharedRepoListItem extends React.Component {
isShowSharedDialog: false, isShowSharedDialog: false,
isRenaming: false, isRenaming: false,
isStarred: this.props.repo.starred, isStarred: this.props.repo.starred,
isFolderPermissionDialogOpen: false
}; };
this.isDeparementOnwerGroupMember = false; this.isDeparementOnwerGroupMember = false;
} }
@@ -109,7 +111,7 @@ class SharedRepoListItem extends React.Component {
this.onItemRenameToggle(); this.onItemRenameToggle();
break; break;
case 'Folder Permission': case 'Folder Permission':
this.onItemPermisionChanged(); this.onItemFolderPermissionToggle();
break; break;
case 'Details': case 'Details':
this.onItemDetails(); this.onItemDetails();
@@ -143,8 +145,8 @@ class SharedRepoListItem extends React.Component {
this.setState({isRenaming: !this.state.isRenaming}); this.setState({isRenaming: !this.state.isRenaming});
} }
onItemPermisionChanged = () => { onItemFolderPermissionToggle = () => {
// todo this.setState({isFolderPermissionDialogOpen: !this.state.isFolderPermissionDialogOpen});
} }
onItemDetails = () => { onItemDetails = () => {
@@ -364,7 +366,7 @@ class SharedRepoListItem extends React.Component {
<td title={repo.owner_contact_email}>{repo.owner_name}</td> <td title={repo.owner_contact_email}>{repo.owner_name}</td>
</tr> </tr>
{this.state.isShowSharedDialog && ( {this.state.isShowSharedDialog && (
<ModalPotal> <ModalPortal>
<ShareDialog <ShareDialog
itemType={'library'} itemType={'library'}
itemName={repo.repo_name} itemName={repo.repo_name}
@@ -377,7 +379,17 @@ class SharedRepoListItem extends React.Component {
isGroupOwnedRepo={isGroupOwnedRepo} isGroupOwnedRepo={isGroupOwnedRepo}
toggleDialog={this.toggleShareDialog} toggleDialog={this.toggleShareDialog}
/> />
</ModalPotal> </ModalPortal>
)}
{this.state.isFolderPermissionDialogOpen && (
<ModalPortal>
<LibSubFolderPermissionDialog
toggleDialog={this.onItemFolderPermissionToggle}
repoID={repo.repo_id}
repoName={repo.repo_name}
isDepartmentRepo={true}
/>
</ModalPortal>
)} )}
</Fragment> </Fragment>
); );
@@ -404,7 +416,7 @@ class SharedRepoListItem extends React.Component {
<td>{this.generatorMobileMenu()}</td> <td>{this.generatorMobileMenu()}</td>
</tr> </tr>
{this.state.isShowSharedDialog && ( {this.state.isShowSharedDialog && (
<ModalPotal> <ModalPortal>
<ShareDialog <ShareDialog
itemType={'library'} itemType={'library'}
itemName={repo.repo_name} itemName={repo.repo_name}
@@ -417,7 +429,7 @@ class SharedRepoListItem extends React.Component {
isGroupOwnedRepo={isGroupOwnedRepo} isGroupOwnedRepo={isGroupOwnedRepo}
toggleDialog={this.toggleShareDialog} toggleDialog={this.toggleShareDialog}
/> />
</ModalPotal> </ModalPortal>
)} )}
</Fragment> </Fragment>
); );