1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-09-06 17:33:18 +00:00

ADD: generate repo-api-token for department (#4233)

This commit is contained in:
Alex Happy
2019-11-07 14:10:37 +08:00
committed by Daniel Pan
parent 007a254aa5
commit b60d0e6170
3 changed files with 39 additions and 6 deletions

View File

@@ -13,6 +13,7 @@ import Rename from '../rename';
import { seafileAPI } from '../../utils/seafile-api'; import { seafileAPI } from '../../utils/seafile-api';
import LibHistorySettingDialog from '../dialog/lib-history-setting-dialog'; import LibHistorySettingDialog from '../dialog/lib-history-setting-dialog';
import toaster from '../toast'; import toaster from '../toast';
import RepoAPITokenDialog from "../dialog/repo-api-token-dialog";
const propTypes = { const propTypes = {
currentGroup: PropTypes.object, currentGroup: PropTypes.object,
@@ -41,6 +42,7 @@ class SharedRepoListItem extends React.Component {
isFolderPermissionDialogOpen: false, isFolderPermissionDialogOpen: false,
isHistorySettingDialogShow: false, isHistorySettingDialogShow: false,
isDeleteDialogShow: false, isDeleteDialogShow: false,
isAPITokenDialogShow: false,
}; };
this.isDeparementOnwerGroupMember = false; this.isDeparementOnwerGroupMember = false;
} }
@@ -130,6 +132,9 @@ class SharedRepoListItem extends React.Component {
case 'History Setting': case 'History Setting':
this.onHistorySettingToggle(); this.onHistorySettingToggle();
break; break;
case 'API Token':
this.onAPITokenToggle();
break;
default: default:
break; break;
} }
@@ -181,6 +186,10 @@ class SharedRepoListItem extends React.Component {
this.setState({isShowSharedDialog: false}); this.setState({isShowSharedDialog: false});
} }
onAPITokenToggle = () => {
this.setState({isAPITokenDialogShow: !this.state.isAPITokenDialogShow});
}
translateMenuItem = (menuItem) => { translateMenuItem = (menuItem) => {
let translateResult = ''; let translateResult = '';
switch(menuItem) { switch(menuItem) {
@@ -202,6 +211,9 @@ class SharedRepoListItem extends React.Component {
case 'History Setting': case 'History Setting':
translateResult = gettext('History Setting'); translateResult = gettext('History Setting');
break; break;
case 'API Token':
translateResult = gettext('API Token');
break;
default: default:
break; break;
} }
@@ -225,6 +237,7 @@ class SharedRepoListItem extends React.Component {
} else { } else {
operations = ['Rename', 'Details']; operations = ['Rename', 'Details'];
} }
operations.push('API Token');
} else { } else {
operations.push('Unshare'); operations.push('Unshare');
} }
@@ -430,6 +443,14 @@ class SharedRepoListItem extends React.Component {
/> />
</ModalPortal> </ModalPortal>
)} )}
{this.state.isAPITokenDialogShow && (
<ModalPortal>
<RepoAPITokenDialog
repo={repo}
onRepoAPITokenToggle={this.onAPITokenToggle}
/>
</ModalPortal>
)}
</Fragment> </Fragment>
); );
} }

View File

@@ -45,7 +45,7 @@ class RepoAPITokensView(APIView):
# permission check # permission check
username = request.user.username username = request.user.username
if not permission_check_admin_owner(username, repo_id): if not permission_check_admin_owner(username, repo_id, request):
error_msg = _('Permission denied.') error_msg = _('Permission denied.')
return api_error(status.HTTP_403_FORBIDDEN, error_msg) return api_error(status.HTTP_403_FORBIDDEN, error_msg)
@@ -73,7 +73,7 @@ class RepoAPITokensView(APIView):
# permission check # permission check
username = request.user.username username = request.user.username
if not permission_check_admin_owner(username, repo_id): if not permission_check_admin_owner(username, repo_id, request):
error_msg = _('Permission denied.') error_msg = _('Permission denied.')
return api_error(status.HTTP_403_FORBIDDEN, error_msg) return api_error(status.HTTP_403_FORBIDDEN, error_msg)
@@ -108,7 +108,7 @@ class RepoAPITokenView(APIView):
username = request.user.username username = request.user.username
# permission check # permission check
if not permission_check_admin_owner(username, repo_id): if not permission_check_admin_owner(username, repo_id, request):
error_msg = _('Permission denied.') error_msg = _('Permission denied.')
return api_error(status.HTTP_403_FORBIDDEN, error_msg) return api_error(status.HTTP_403_FORBIDDEN, error_msg)
@@ -139,7 +139,7 @@ class RepoAPITokenView(APIView):
# permission check # permission check
username = request.user.username username = request.user.username
if not permission_check_admin_owner(username, repo_id): if not permission_check_admin_owner(username, repo_id, request):
error_msg = _('Permission denied.') error_msg = _('Permission denied.')
return api_error(status.HTTP_403_FORBIDDEN, error_msg) return api_error(status.HTTP_403_FORBIDDEN, error_msg)

View File

@@ -12,14 +12,26 @@ from seahub.settings import ENABLE_VIDEO_THUMBNAIL, THUMBNAIL_ROOT
from seahub.thumbnail.utils import get_thumbnail_src from seahub.thumbnail.utils import get_thumbnail_src
from seahub.utils import is_pro_version, FILEEXT_TYPE_MAP, IMAGE, XMIND, VIDEO from seahub.utils import is_pro_version, FILEEXT_TYPE_MAP, IMAGE, XMIND, VIDEO
from seahub.utils.file_tags import get_files_tags_in_dir from seahub.utils.file_tags import get_files_tags_in_dir
from seahub.utils.repo import is_group_repo_staff
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
json_content_type = 'application/json; charset=utf-8' json_content_type = 'application/json; charset=utf-8'
HTTP_520_OPERATION_FAILED = 520 HTTP_520_OPERATION_FAILED = 520
def permission_check_admin_owner(username, repo_id): # maybe add more complex logic in the future def permission_check_admin_owner(username, repo_id, request=None): # maybe add more complex logic in the future
return username == seafile_api.get_repo_owner(repo_id) """
if repo is owned by user return true
or check whether repo is owned by group and whether user is group's staff
so finally the code is:
check user == repo's owner
else
check user is the such group's staff
"""
if username == seafile_api.get_repo_owner(repo_id):
return True
else:
return is_group_repo_staff(request, repo_id, username)
def get_dir_file_recursively(repo_id, path, all_dirs): def get_dir_file_recursively(repo_id, path, all_dirs):