问答 查看内容
返回列表

管理后台授权模版不想开放出来,怎么隐藏

15 1
发表于 昨天 11:40 | 查看全部 阅读模式
管理后台授权模版不想开放出来,怎么隐藏

截图202604141140046025.png

评论1

观小豪楼主Lv.1 发表于 昨天 11:40 | 查看全部
关于这个问题,可以使用插件管理功能。

插件代码:


  1. <div>(() => {
  2.   <span style="color: #0000ff;">const</span> <span style="color: #008080;">PLUGIN_NAME</span> = <span style="color: #a31515;">'隐藏-管理后台授权-UAT'</span>;
  3.   <span style="color: #0000ff;">const</span> <span style="color: #008080;">STYLE_ID</span> = <span style="color: #a31515;">'gd-hide-admin-backend-authorization-style'</span>;
  4.   <span style="color: #0000ff;">const</span> <span style="color: #008080;">TAB_TEXT</span> = <span style="color: #a31515;">'管理后台授权'</span>;
  5.   <span style="color: #0000ff;">const</span> <span style="color: #008080;">LOGIN_SETTING_RE</span> = <span style="color: #800000;">/\/admin\/systemManage\/loginSetting(?:\/|$)/</span>;
  6.   <span style="color: #0000ff;">const</span> <span style="color: #008080;">AUTHORIZATION_RE</span> = /<span style="color: #cd3131;">\</span>/admin<span style="color: #cd3131;">\</span>/systemManage<span style="color: #cd3131;">\</span>/loginSetting<span style="color: #cd3131;">\</span>/authorization(?:[<span style="color: #800000;">/?#]|$)/</span>;
  7.   <span style="color: #0000ff;">const</span> <span style="color: #008080;">FALLBACK_KEY</span> = <span style="color: #a31515;">'admin_system_backend_authorization'</span>;

  8.   <span style="color: #0000ff;">const</span> isLoginSettingPage = () => <span style="color: #008080;">LOGIN_SETTING_RE</span>.test(window.location.pathname);
  9.   <span style="color: #0000ff;">const</span> isAuthorizationPage = () => <span style="color: #008080;">AUTHORIZATION_RE</span>.test(window.location.pathname);

  10.   <span style="color: #0000ff;">const</span> ensureStyle = () => {
  11.     <span style="color: #0000ff;">if</span> (document.getElementById(<span style="color: #008080;">STYLE_ID</span>)) <span style="color: #0000ff;">return</span>;
  12.     <span style="color: #0000ff;">const</span> style = document.createElement(<span style="color: #a31515;">'style'</span>);
  13.     style.id = <span style="color: #008080;">STYLE_ID</span>;
  14.     style.textContent = <span style="color: #a31515;">`</span>
  15. <span style="color: #a31515;">      [data-gd-hide-admin-backend-authorization="true"] {</span>
  16. <span style="color: #a31515;">        display: none !important;</span>
  17. <span style="color: #a31515;">        visibility: hidden !important;</span>
  18. <span style="color: #a31515;">        pointer-events: none !important;</span>
  19. <span style="color: #a31515;">      }</span>
  20. <span style="color: #a31515;">    `</span>;
  21.     document.head.appendChild(style);
  22.   };

  23.   <span style="color: #0000ff;">const</span> findTextNodes = () => {
  24.     <span style="color: #0000ff;">const</span> nodes = [];
  25.     <span style="color: #0000ff;">const</span> walker = document.createTreeWalker(
  26.       document.body,
  27.       <span style="color: #008080;">NodeFilter</span>.<span style="color: #008080;">SHOW_TEXT</span>,
  28.       {
  29.         acceptNode: (node) => (
  30.           node.nodeValue && node.nodeValue.trim() === <span style="color: #008080;">TAB_TEXT</span>
  31.             ? <span style="color: #008080;">NodeFilter</span>.<span style="color: #008080;">FILTER_ACCEPT</span>
  32.             : <span style="color: #008080;">NodeFilter</span>.<span style="color: #008080;">FILTER_REJECT</span>
  33.         ),
  34.       },
  35.     );

  36.     <span style="color: #0000ff;">let</span> node = walker.nextNode();
  37.     <span style="color: #0000ff;">while</span> (node) {
  38.       nodes.push(node);
  39.       node = walker.nextNode();
  40.     }
  41.     <span style="color: #0000ff;">return</span> nodes;
  42.   };

  43.   <span style="color: #0000ff;">const</span> hideAuthorizationTab = () => {
  44.     <span style="color: #0000ff;">if</span> (!isLoginSettingPage() || !document.body) <span style="color: #0000ff;">return</span> <span style="color: #0000ff;">false</span>;
  45.     ensureStyle();

  46.     <span style="color: #0000ff;">let</span> hidden = <span style="color: #0000ff;">false</span>;
  47.     findTextNodes().forEach((textNode) => {
  48.       <span style="color: #0000ff;">const</span> textEl = textNode.parentElement;
  49.       <span style="color: #0000ff;">const</span> tabEl = textEl && (
  50.         textEl.closest(<span style="color: #a31515;">'.ant-tabs-tab'</span>)
  51.         || textEl.closest(<span style="color: #a31515;">'[role="tab"]'</span>)
  52.         || textEl.closest(<span style="color: #a31515;">'.gd-tab, .tabs-tab'</span>)
  53.       );
  54.       <span style="color: #0000ff;">const</span> target = tabEl || textEl;
  55.       <span style="color: #0000ff;">if</span> (!(target <span style="color: #0000ff;">instanceof</span> <span style="color: #008080;">HTMLElement</span>)) <span style="color: #0000ff;">return</span>;
  56.       target.setAttribute(<span style="color: #a31515;">'data-gd-hide-admin-backend-authorization'</span>, <span style="color: #a31515;">'true'</span>);
  57.       target.style.setProperty(<span style="color: #a31515;">'display'</span>, <span style="color: #a31515;">'none'</span>, <span style="color: #a31515;">'important'</span>);
  58.       target.style.setProperty(<span style="color: #a31515;">'visibility'</span>, <span style="color: #a31515;">'hidden'</span>, <span style="color: #a31515;">'important'</span>);
  59.       target.style.setProperty(<span style="color: #a31515;">'pointer-events'</span>, <span style="color: #a31515;">'none'</span>, <span style="color: #a31515;">'important'</span>);
  60.       target.setAttribute(<span style="color: #a31515;">'aria-hidden'</span>, <span style="color: #a31515;">'true'</span>);
  61.       target.setAttribute(<span style="color: #a31515;">'tabindex'</span>, <span style="color: #a31515;">'-1'</span>);
  62.       hidden = <span style="color: #0000ff;">true</span>;
  63.     });

  64.     <span style="color: #0000ff;">return</span> hidden;
  65.   };

  66.   <span style="color: #0000ff;">const</span> redirectFromAuthorization = () => {
  67.     <span style="color: #0000ff;">if</span> (!isAuthorizationPage()) <span style="color: #0000ff;">return</span> <span style="color: #0000ff;">false</span>;
  68.     <span style="color: #0000ff;">const</span> nextPath = window.location.pathname.replace(<span style="color: #800000;">/\/authorization$/</span>, <span style="color: #a31515;">'/generalSettings'</span>);
  69.     window.history.replaceState(<span style="color: #0000ff;">null</span>, <span style="color: #a31515;">''</span>, nextPath + window.location.search + window.location.hash);
  70.     window.dispatchEvent(<span style="color: #0000ff;">new</span> <span style="color: #008080;">PopStateEvent</span>(<span style="color: #a31515;">'popstate'</span>));
  71.     <span style="color: #0000ff;">return</span> <span style="color: #0000ff;">true</span>;
  72.   };

  73.   <span style="color: #0000ff;">const</span> applyDisplayControl = () => {
  74.     <span style="color: #0000ff;">if</span> (!window.<span style="color: #008080;">GD</span> || <span style="color: #0000ff;">typeof</span> window.<span style="color: #008080;">GD</span>.dispatch !== <span style="color: #a31515;">'function'</span>) <span style="color: #0000ff;">return</span> <span style="color: #0000ff;">false</span>;
  75.     window.<span style="color: #008080;">GD</span>.dispatch(<span style="color: #a31515;">'config-display-control'</span>, { hiddenKeys: [<span style="color: #008080;">FALLBACK_KEY</span>] });
  76.     <span style="color: #0000ff;">return</span> <span style="color: #0000ff;">true</span>;
  77.   };

  78.   <span style="color: #0000ff;">const</span> apply = () => {
  79.     <span style="color: #0000ff;">const</span> dispatched = applyDisplayControl();
  80.     <span style="color: #0000ff;">const</span> redirected = redirectFromAuthorization();
  81.     <span style="color: #0000ff;">const</span> hidden = hideAuthorizationTab();
  82.     <span style="color: #0000ff;">if</span> (hidden || redirected || dispatched) {
  83.       console.log(<span style="color: #a31515;">`[</span>${<span style="color: #008080;">PLUGIN_NAME</span>}<span style="color: #a31515;">] applied`</span>, { hidden, redirected, dispatched });
  84.     }
  85.   };

  86.   <span style="color: #0000ff;">const</span> scheduleApply = () => {
  87.     apply();
  88.     setTimeout(apply, <span style="color: #098658;">200</span>);
  89.     setTimeout(apply, <span style="color: #098658;">800</span>);
  90.     setTimeout(apply, <span style="color: #098658;">2000</span>);
  91.     setTimeout(apply, <span style="color: #098658;">5000</span>);
  92.   };

  93.   <span style="color: #0000ff;">const</span> observer = <span style="color: #0000ff;">new</span> <span style="color: #008080;">MutationObserver</span>(() => {
  94.     hideAuthorizationTab();
  95.   });

  96.   <span style="color: #0000ff;">if</span> (document.readyState === <span style="color: #a31515;">'loading'</span>) {
  97.     document.addEventListener(<span style="color: #a31515;">'DOMContentLoaded'</span>, scheduleApply, { once: <span style="color: #0000ff;">true</span> });
  98.   } <span style="color: #0000ff;">else</span> {
  99.     scheduleApply();
  100.   }

  101.   observer.observe(document.documentElement, { childList: <span style="color: #0000ff;">true</span>, subtree: <span style="color: #0000ff;">true</span> });
  102.   window.addEventListener(<span style="color: #a31515;">'load'</span>, scheduleApply);
  103.   window.addEventListener(<span style="color: #a31515;">'hashchange'</span>, scheduleApply);
  104.   window.addEventListener(<span style="color: #a31515;">'popstate'</span>, scheduleApply);
  105.   document.addEventListener(<span style="color: #a31515;">'visibilitychange'</span>, () => {
  106.     <span style="color: #0000ff;">if</span> (!document.hidden) scheduleApply();
  107.   });
  108. })();</div>
复制代码




回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

微信服务号
联系我们
电话:400-880-0750
邮箱:hello@guandata.com
Copyright © 2001-2026 观远社区 版权所有 All Rights Reserved. 浙 ICP 备15006424号-3
去回复 去发帖 返回顶部
快速回复 返回顶部 返回列表