mirror of
https://github.com/haiwen/seahub.git
synced 2025-05-10 17:05:06 +00:00
add publish wiki config (#7205)
* add publish wiki config * update test * update can_create_wiki * update test --------- Co-authored-by: 孙永强 <11704063+s-yongqiang@user.noreply.gitee.com>
This commit is contained in:
parent
bd013174a9
commit
b3aaba6ea2
frontend/src
seahub
api2/endpoints
base
role_permissions
templates
tests
@ -3,7 +3,7 @@ import { Dropdown, DropdownToggle, DropdownMenu, DropdownItem } from 'reactstrap
|
||||
import PropTypes from 'prop-types';
|
||||
import dayjs from 'dayjs';
|
||||
import relativeTime from 'dayjs/plugin/relativeTime';
|
||||
import { siteRoot, gettext, username } from '../../utils/constants';
|
||||
import { siteRoot, gettext, username, canPublishWiki } from '../../utils/constants';
|
||||
import ModalPortal from '../modal-portal';
|
||||
import DeleteWikiDialog from '../dialog/delete-wiki-dialog';
|
||||
import RenameWikiDialog from '../dialog/rename-wiki-dialog';
|
||||
@ -245,7 +245,7 @@ class WikiCardItem extends Component {
|
||||
<DropdownMenu right={true} className="dtable-dropdown-menu">
|
||||
{showRename &&
|
||||
<DropdownItem onClick={this.onRenameToggle}>{gettext('Rename')}</DropdownItem>}
|
||||
{showPublish &&
|
||||
{showPublish && canPublishWiki &&
|
||||
<DropdownItem onClick={this.onPublishToggle}>{gettext('Publish')}</DropdownItem>}
|
||||
{showShare &&
|
||||
<DropdownItem onClick={this.onShareToggle}>{gettext('Share')}</DropdownItem>
|
||||
|
@ -1,6 +1,6 @@
|
||||
import React, { Component } from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
import { gettext, username, canPublishRepo, isPro } from '../../utils/constants';
|
||||
import { gettext, username, canCreateWiki, isPro } from '../../utils/constants';
|
||||
import WikiCardGroup from './wiki-card-group';
|
||||
import wikiAPI from '../../utils/wiki-api';
|
||||
import { Utils } from '../../utils/utils';
|
||||
@ -30,7 +30,7 @@ class WikiCardView extends Component {
|
||||
}
|
||||
|
||||
componentDidMount() {
|
||||
if (!canPublishRepo || !isPro) return;
|
||||
if (!canCreateWiki || !isPro) return;
|
||||
let departmentMap = {};
|
||||
wikiAPI.listWikiDepartments().then(res => {
|
||||
res.data.forEach(item => departmentMap[item.id] = true);
|
||||
@ -88,7 +88,7 @@ class WikiCardView extends Component {
|
||||
title={gettext('My Wikis')}
|
||||
isDepartment={false}
|
||||
isShowAvatar={false}
|
||||
toggleAddWikiDialog={canPublishRepo ? toggleAddWikiDialog.bind(this, null) : null}
|
||||
toggleAddWikiDialog={canCreateWiki ? toggleAddWikiDialog.bind(this, null) : null}
|
||||
/>
|
||||
);
|
||||
wikiCardGroups.push(
|
||||
@ -122,7 +122,7 @@ class WikiCardView extends Component {
|
||||
title={groupWiki.group_name}
|
||||
isDepartment={true}
|
||||
isShowAvatar={false}
|
||||
toggleAddWikiDialog={(canPublishRepo && this.state.departmentMap[groupWiki.group_id]) ? toggleAddWikiDialog.bind(this, groupWiki.group_id) : null}
|
||||
toggleAddWikiDialog={(canCreateWiki && this.state.departmentMap[groupWiki.group_id]) ? toggleAddWikiDialog.bind(this, groupWiki.group_id) : null}
|
||||
/>
|
||||
);
|
||||
}
|
||||
|
@ -1,7 +1,7 @@
|
||||
import React, { Component, Fragment } from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
import { Dropdown, DropdownToggle, DropdownMenu, DropdownItem } from 'reactstrap';
|
||||
import { gettext, canPublishRepo } from '../../utils/constants';
|
||||
import { gettext, canCreateWiki } from '../../utils/constants';
|
||||
import { Utils } from '../../utils/utils';
|
||||
import toaster from '../../components/toast';
|
||||
import ModalPortal from '../../components/modal-portal';
|
||||
@ -337,7 +337,7 @@ class Wikis extends Component {
|
||||
<div className="cur-view-path">
|
||||
<div className="path-container">
|
||||
<h3 className="sf-heading m-0">{gettext('Wikis')}</h3>
|
||||
{canPublishRepo &&
|
||||
{canCreateWiki &&
|
||||
<Dropdown
|
||||
direction="down"
|
||||
className="add-wiki-dropdown"
|
||||
|
@ -67,7 +67,8 @@ export const uploadLinkExpireDaysMax = window.app.pageOptions.uploadLinkExpireDa
|
||||
export const uploadLinkExpireDaysDefault = window.app.pageOptions.uploadLinkExpireDaysDefault;
|
||||
export const enableShareToDepartment = window.app.pageOptions.enableShareToDepartment;
|
||||
export const maxFileName = window.app.pageOptions.maxFileName;
|
||||
export const canPublishRepo = window.app.pageOptions.canPublishRepo;
|
||||
export const canCreateWiki = window.app.pageOptions.canCreateWiki;
|
||||
export const canPublishWiki = window.app.pageOptions.canPublishWiki;
|
||||
export const enableEncryptedLibrary = window.app.pageOptions.enableEncryptedLibrary;
|
||||
export const enableRepoHistorySetting = window.app.pageOptions.enableRepoHistorySetting;
|
||||
export const enableUserCleanTrash = window.app.pageOptions.enableUserCleanTrash;
|
||||
|
@ -186,6 +186,9 @@ class Wikis2View(APIView):
|
||||
|
||||
if not request.user.permissions.can_add_repo():
|
||||
return api_error(status.HTTP_403_FORBIDDEN, 'You do not have permission to create library.')
|
||||
|
||||
if not request.user.permissions.can_create_wiki():
|
||||
return api_error(status.HTTP_403_FORBIDDEN, 'You do not have permission to create wiki.')
|
||||
|
||||
wiki_name = request.data.get("name", None)
|
||||
if not wiki_name:
|
||||
@ -1239,6 +1242,10 @@ class Wiki2PublishView(APIView):
|
||||
error_msg = _('The custom part of URL should have 5-30 characters.')
|
||||
return api_error(status.HTTP_400_BAD_REQUEST, error_msg)
|
||||
|
||||
if not request.user.permissions.can_publish_wiki():
|
||||
error_msg = 'Permission denied.'
|
||||
return api_error(status.HTTP_403_FORBIDDEN, error_msg)
|
||||
|
||||
wiki = Wiki.objects.get(wiki_id=wiki_id)
|
||||
if not wiki:
|
||||
error_msg = "Wiki not found."
|
||||
|
@ -99,7 +99,7 @@ class WikisView(APIView):
|
||||
return api_error(status.HTTP_404_NOT_FOUND, error_msg)
|
||||
|
||||
# check perm
|
||||
if not (request.user.permissions.can_publish_repo() and request.user.permissions.can_generate_share_link()):
|
||||
if not (request.user.permissions.can_create_wiki() and request.user.permissions.can_generate_share_link()):
|
||||
error_msg = 'Permission denied.'
|
||||
return api_error(status.HTTP_403_FORBIDDEN, error_msg)
|
||||
|
||||
|
@ -440,11 +440,16 @@ class UserPermissions(object):
|
||||
def storage_ids(self):
|
||||
return self._get_perm_by_roles('storage_ids')
|
||||
|
||||
def can_publish_repo(self):
|
||||
def can_create_wiki(self):
|
||||
if not settings.ENABLE_WIKI:
|
||||
return False
|
||||
|
||||
return self._get_perm_by_roles('can_publish_repo')
|
||||
return self._get_perm_by_roles('can_create_wiki')
|
||||
|
||||
def can_publish_wiki(self):
|
||||
if not settings.ENABLE_WIKI:
|
||||
return False
|
||||
return self._get_perm_by_roles('can_publish_wiki')
|
||||
|
||||
|
||||
class AdminPermissions(object):
|
||||
|
@ -43,7 +43,8 @@ DEFAULT_ENABLED_ROLE_PERMISSIONS = {
|
||||
'can_export_files_via_mobile_client': True,
|
||||
'storage_ids': [],
|
||||
'role_quota': '',
|
||||
'can_publish_repo': True,
|
||||
'can_create_wiki': True,
|
||||
'can_publish_wiki': True,
|
||||
'upload_rate_limit': 0,
|
||||
'download_rate_limit': 0,
|
||||
},
|
||||
@ -65,7 +66,8 @@ DEFAULT_ENABLED_ROLE_PERMISSIONS = {
|
||||
'can_export_files_via_mobile_client': False,
|
||||
'storage_ids': [],
|
||||
'role_quota': '',
|
||||
'can_publish_repo': False,
|
||||
'can_create_wiki': False,
|
||||
'can_publish_wiki': False,
|
||||
'upload_rate_limit': 0,
|
||||
'download_rate_limit': 0,
|
||||
},
|
||||
|
@ -107,7 +107,8 @@
|
||||
sideNavFooterCustomHtml: "{{ side_nav_footer_custom_html|safe|escapejs }}",
|
||||
aboutDialogCustomHtml: "{{ about_dialog_custom_html|safe|escapejs }}",
|
||||
maxFileName: "{{ max_file_name }}",
|
||||
canPublishRepo: {% if user.permissions.can_publish_repo %} true {% else %} false {% endif %},
|
||||
canCreateWiki: {% if user.permissions.can_create_wiki %} true {% else %} false {% endif %},
|
||||
canPublishWiki: {% if user.permissions.can_publish_wiki %} true {% else %} false {% endif %},
|
||||
enableEncryptedLibrary: {% if enable_encrypted_library %} true {% else %} false {% endif %},
|
||||
enableRepoHistorySetting: {% if enable_repo_history_setting %} true {% else %} false {% endif %},
|
||||
enableUserCleanTrash: {% if enable_user_clean_trash %} true {% else %} false {% endif %},
|
||||
|
@ -14,7 +14,7 @@ from seahub.role_permissions.settings import ENABLED_ROLE_PERMISSIONS
|
||||
from seahub.test_utils import BaseTestCase
|
||||
|
||||
TEST_CAN_PUBLISH_REPO_FALSE = copy.deepcopy(ENABLED_ROLE_PERMISSIONS)
|
||||
TEST_CAN_PUBLISH_REPO_FALSE['default']['can_publish_repo'] = False
|
||||
TEST_CAN_PUBLISH_REPO_FALSE['default']['can_create_wiki'] = False
|
||||
|
||||
TEST_CAN_GENERATE_SHARE_LINK = copy.deepcopy(ENABLED_ROLE_PERMISSIONS)
|
||||
TEST_CAN_GENERATE_SHARE_LINK['default']['can_generate_share_link'] = False
|
||||
|
@ -12,7 +12,7 @@ TEST_CAN_ADD_PUBLICK_REPO_TRUE = copy.deepcopy(ENABLED_ROLE_PERMISSIONS)
|
||||
TEST_CAN_ADD_PUBLICK_REPO_TRUE['default']['can_add_public_repo'] = True
|
||||
|
||||
TEST_PUBLISH_REPO_CAN_PUBLISH_REPO_FALSE = copy.deepcopy(ENABLED_ROLE_PERMISSIONS)
|
||||
TEST_PUBLISH_REPO_CAN_PUBLISH_REPO_FALSE['default']['can_publish_repo'] = False
|
||||
TEST_PUBLISH_REPO_CAN_PUBLISH_REPO_FALSE['default']['can_create_wiki'] = False
|
||||
|
||||
CLOUD_MODE_TRUE = True
|
||||
MULTI_TENANCY_TRUE = True
|
||||
@ -85,20 +85,20 @@ class UserPermissionsTest(BaseTestCase):
|
||||
|
||||
def test_can_publish_repo_permission(self):
|
||||
# enableWIKI = True, and can_publish_repo = True
|
||||
assert self.user.permissions._get_perm_by_roles('can_publish_repo') is True
|
||||
assert self.user.permissions.can_publish_repo() is True
|
||||
assert self.user.permissions._get_perm_by_roles('can_create_wiki') is True
|
||||
assert self.user.permissions.can_create_wiki() is True
|
||||
|
||||
@override_settings(ENABLE_WIKI=False)
|
||||
def test_can_publish_repo_permission_with_enable_wiki_False(self):
|
||||
# enableWIKI = False, and can_publish_repo = True
|
||||
assert self.user.permissions._get_perm_by_roles('can_publish_repo') is True
|
||||
assert self.user.permissions.can_publish_repo() is False
|
||||
assert self.user.permissions._get_perm_by_roles('can_create_wiki') is True
|
||||
assert self.user.permissions.can_create_wiki() is False
|
||||
|
||||
def test_can_publish_repo_permission_with_can_publish_repo_False(self):
|
||||
# enableWIKI = True, and can_publish_repo = False
|
||||
with patch('seahub.role_permissions.utils.ENABLED_ROLE_PERMISSIONS', TEST_PUBLISH_REPO_CAN_PUBLISH_REPO_FALSE):
|
||||
assert self.user.permissions._get_perm_by_roles('can_publish_repo') is False
|
||||
assert self.user.permissions.can_publish_repo() is False
|
||||
assert self.user.permissions._get_perm_by_roles('can_create_wiki') is False
|
||||
assert self.user.permissions.can_create_wiki() is False
|
||||
|
||||
|
||||
class RegistrationFormTest(BaseTestCase):
|
||||
|
@ -11,4 +11,4 @@ class UtilsTest(BaseTestCase):
|
||||
assert DEFAULT_USER in get_available_roles()
|
||||
|
||||
def test_get_enabled_role_permissions_by_role(self):
|
||||
assert len(list(get_enabled_role_permissions_by_role(DEFAULT_USER).keys())) == 20
|
||||
assert len(list(get_enabled_role_permissions_by_role(DEFAULT_USER).keys())) == 21
|
||||
|
Loading…
Reference in New Issue
Block a user