Просмотр исходного кода

Merge branch 'feat/admin-disable-link-sharing' into feat/admin-disable-link-sharing-front-disable-button-using-config

hakumizuki 4 лет назад
Родитель
Сommit
317aa443b7

+ 7 - 0
resource/locales/en_US/translation.json

@@ -584,6 +584,13 @@
       "restricted": "Restricted (Requires approval by administrators)",
       "closed": "Closed (Invitation Only)"
     },
+    "share_link_rights": "Share link rights",
+    "link_sharing": "Link sharing",
+    "link_sharing_rights_choices": {
+      "allow": "Allow",
+      "deny": "Deny"
+    },
+    "updated_shareLink_setting": "Succeeded to update share link setting",
     "configuration": " Configuration",
     "optional": "Optional",
     "Treat username matching as identical": "Automatically bind external accounts newly logged in to local accounts when <code>username</code> match",

+ 7 - 0
resource/locales/ja_JP/translation.json

@@ -583,6 +583,13 @@
       "restricted": "制限 (登録完了には管理者の承認が必要)",
       "closed": "非公開 (登録には管理者による招待が必要)"
     },
+    "share_link_rights": "シェアリンクの権限",
+    "link_sharing": "リンクのシェア",
+    "link_sharing_rights_choices": {
+      "allow": "許可",
+      "deny": "許可しない"
+    },
+    "updated_shareLink_setting": "シェアリンク設定を更新しました。",
     "configuration": "設定",
     "optional": "オプション",
     "Treat username matching as identical": "新規ログイン時、<code>username</code> が一致したローカルアカウントが存在した場合は自動的に紐付ける",

+ 7 - 0
resource/locales/zh_CN/translation.json

@@ -572,6 +572,13 @@
 			"restricted": "受限(需要管理员批准)",
 			"closed": "已关闭(仅限邀请)"
 		},
+    "share_link_rights": "分享链接权",
+    "link_sharing": "链接共享",
+    "link_sharing_rights_choices": {
+      "allow": "允许",
+      "deny": "拒绝"
+    },
+    "updated_shareLink_setting": "成功更新分享链接设置",
 		"configuration": " 配置",
 		"optional": "可选的",
 		"Treat username matching as identical": "Automatically bind external accounts newly logged in to local accounts when <code>username</code> match",

+ 53 - 1
src/client/js/components/Admin/Security/ShareLinkSetting.jsx

@@ -51,6 +51,7 @@ class ShareLinkSetting extends React.Component {
     this.closeDeleteConfirmModal = this.closeDeleteConfirmModal.bind(this);
     this.deleteAllLinksButtonHandler = this.deleteAllLinksButtonHandler.bind(this);
     this.deleteLinkById = this.deleteLinkById.bind(this);
+    this.putShareLinkSetting = this.putShareLinkSetting.bind(this);
   }
 
   componentWillMount() {
@@ -67,6 +68,17 @@ class ShareLinkSetting extends React.Component {
 
   }
 
+  async putShareLinkSetting() {
+    const { t, adminGeneralSecurityContainer } = this.props;
+    try {
+      await adminGeneralSecurityContainer.updateShareLinkSetting();
+      toastSuccess(t('security_setting.updated_shareLink_setting'));
+    }
+    catch (err) {
+      toastError(err);
+    }
+  }
+
   showDeleteConfirmModal() {
     this.setState({ isDeleteConfirmModalShown: true });
   }
@@ -109,7 +121,7 @@ class ShareLinkSetting extends React.Component {
   render() {
     const { t, adminGeneralSecurityContainer } = this.props;
     const {
-      shareLinks, shareLinksActivePage, totalshareLinks, shareLinksPagingLimit,
+      shareLinks, shareLinksActivePage, totalshareLinks, shareLinksPagingLimit, disableLinkSharing,
     } = adminGeneralSecurityContainer.state;
 
     return (
@@ -125,6 +137,46 @@ class ShareLinkSetting extends React.Component {
           </button>
           <h2 className="alert-anchor border-bottom">{t('share_links.share_link_management')}</h2>
         </div>
+        <h4>{t('security_setting.share_link_rights')}</h4>
+        <div className="row mb-4">
+          <div className="col-md-3 text-md-right py-2">
+            <strong>{t('security_setting.link_sharing')}</strong>
+          </div>
+          <div className="col-md-9">
+            <div className="dropdown">
+              <button
+                className={`btn btn-outline-secondary dropdown-toggle text-right col-12
+                            col-md-auto ${adminGeneralSecurityContainer.isWikiModeForced && 'disabled'}`}
+                type="button"
+                id="dropdownMenuButton"
+                data-toggle="dropdown"
+                aria-haspopup="true"
+                aria-expanded="true"
+              >
+                <span className="float-left">
+                  {disableLinkSharing === false && t('security_setting.link_sharing_rights_choices.allow')}
+                  {disableLinkSharing === true && t('security_setting.link_sharing_rights_choices.deny')}
+                </span>
+              </button>
+              <div className="dropdown-menu" aria-labelledby="dropdownMenuButton">
+                <button className="dropdown-item" type="button" onClick={() => { adminGeneralSecurityContainer.setDisableLinkSharing(false) }}>
+                  {t('security_setting.link_sharing_rights_choices.allow')}
+                </button>
+                <button className="dropdown-item" type="button" onClick={() => { adminGeneralSecurityContainer.setDisableLinkSharing(true) }}>
+                  {t('security_setting.link_sharing_rights_choices.deny')}
+                </button>
+              </div>
+            </div>
+          </div>
+        </div>
+
+        <div className="row my-3">
+          <div className="text-center text-md-left offset-md-3 col-md-5">
+            <button type="button" className="btn btn-primary" disabled={adminGeneralSecurityContainer.retrieveError != null} onClick={this.putShareLinkSetting}>
+              {t('Update')}
+            </button>
+          </div>
+        </div>
         <Pager
           links={shareLinks}
           activePage={shareLinksActivePage}

+ 24 - 0
src/client/js/services/AdminGeneralSecurityContainer.js

@@ -35,6 +35,7 @@ export default class AdminGeneralSecurityContainer extends Container {
       isGitHubEnabled: false,
       isTwitterEnabled: false,
       setupStrategies: [],
+      disableLinkSharing: false,
       shareLinks: [],
       totalshareLinks: 0,
       shareLinksPagingLimit: Infinity,
@@ -54,6 +55,7 @@ export default class AdminGeneralSecurityContainer extends Container {
       isShowRestrictedByGroup: !generalSetting.hideRestrictedByGroup,
       sessionMaxAge: generalSetting.sessionMaxAge,
       wikiMode: generalSetting.wikiMode,
+      disableLinkSharing: generalSetting.disableLinkSharing,
       isLocalEnabled: generalAuth.isLocalEnabled,
       isLdapEnabled: generalAuth.isLdapEnabled,
       isSamlEnabled: generalAuth.isSamlEnabled,
@@ -88,6 +90,13 @@ export default class AdminGeneralSecurityContainer extends Container {
     this.setState({ sessionMaxAge });
   }
 
+  /**
+   * setter for disableLinkSharing
+   */
+  setDisableLinkSharing(disableLinkSharing) {
+    this.setState({ disableLinkSharing });
+  }
+
   /**
    * Change restrictGuestMode
    */
@@ -137,6 +146,21 @@ export default class AdminGeneralSecurityContainer extends Container {
     return securitySettingParams;
   }
 
+  /**
+   * Update Share Link Settings
+   */
+  async updateShareLinkSetting() {
+
+    let requestParams = {
+      disableLinkSharing: this.state.disableLinkSharing,
+    };
+
+    requestParams = await removeNullPropertyFromObject(requestParams);
+    const response = await this.appContainer.apiv3.put('/security-setting/general-setting', requestParams);
+    const { securitySettingParams } = response.data;
+    return securitySettingParams;
+  }
+
   /**
    * Switch authentication
    */