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

add publish wiki config ()

* 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:
awu0403 2024-12-19 15:14:45 +08:00 committed by GitHub
parent bd013174a9
commit b3aaba6ea2
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
12 changed files with 40 additions and 24 deletions
frontend/src
components/wiki-card-view
pages/wikis
utils
seahub
api2/endpoints
base
role_permissions
templates
tests
api/endpoints
seahub
base
role_permissions

View File

@ -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>

View File

@ -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}
/>
);
}

View File

@ -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"

View File

@ -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;

View File

@ -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."

View File

@ -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)

View File

@ -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):

View File

@ -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,
},

View File

@ -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 %},

View File

@ -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

View File

@ -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):

View File

@ -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