问答 查看内容
返回列表

如何隐藏数据集的数据安全模块

35 1
发表于 昨天 18:01 | 查看全部 阅读模式
如何隐藏数据集的数据安全模块

评论1

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

插件代码:


  1. <div>(() => {
  2.   <span style="color: #0000ff;">if</span> (window.__hideDatasetDataSecurityApplied) <span style="color: #0000ff;">return</span>;
  3.   window.__hideDatasetDataSecurityApplied = <span style="color: #0000ff;">true</span>;

  4.   <span style="color: #0000ff;">const</span> <span style="color: #008080;">PLUGIN_NAME</span> = <span style="color: #a31515;">'隐藏-数据集数据安全-UAT'</span>;
  5.   <span style="color: #0000ff;">const</span> <span style="color: #008080;">TARGET_TEST_ID</span> = <span style="color: #a31515;">'ds-detail-security/auth'</span>;
  6.   <span style="color: #0000ff;">const</span> <span style="color: #008080;">SECURITY_ROUTE_PATTERN</span> = <span style="color: #800000;">/(?:^|\/)data-center\/data-sets\/([^/]+)\/([^/]+)\/details\/security(?:\/[^/?#]*)?(?:[/</span>?<span style="color: #cd3131;">#</span>]|$)/;
  7.   <span style="color: #0000ff;">let</span> scheduled = <span style="color: #0000ff;">false</span>;
  8.   <span style="color: #0000ff;">let</span> hasLoggedDispatch = <span style="color: #0000ff;">false</span>;
  9.   <span style="color: #0000ff;">let</span> hasLoggedHidden = <span style="color: #0000ff;">false</span>;

  10.   <span style="color: #0000ff;">const</span> log = (...args) => console.log(<span style="color: #a31515;">`[</span>${<span style="color: #008080;">PLUGIN_NAME</span>}<span style="color: #a31515;">]`</span>, ...args);

  11.   <span style="color: #0000ff;">const</span> injectStyle = () => {
  12.     <span style="color: #0000ff;">const</span> styleId = <span style="color: #a31515;">`</span>${<span style="color: #008080;">PLUGIN_NAME</span>}<span style="color: #a31515;">-style`</span>;
  13.     <span style="color: #0000ff;">if</span> (document.getElementById(styleId)) <span style="color: #0000ff;">return</span>;

  14.     <span style="color: #0000ff;">const</span> style = document.createElement(<span style="color: #a31515;">'style'</span>);
  15.     style.id = styleId;
  16.     style.textContent = <span style="color: #a31515;">`</span>
  17. <span style="color: #a31515;">      [data-testid="</span>${<span style="color: #008080;">TARGET_TEST_ID</span>}<span style="color: #a31515;">"] {</span>
  18. <span style="color: #a31515;">        display: none !important;</span>
  19. <span style="color: #a31515;">      }</span>

  20. <span style="color: #a31515;">      .ant-tabs-tab:has([data-testid="</span>${<span style="color: #008080;">TARGET_TEST_ID</span>}<span style="color: #a31515;">"]),</span>
  21. <span style="color: #a31515;">      .gd-tabs-tab:has([data-testid="</span>${<span style="color: #008080;">TARGET_TEST_ID</span>}<span style="color: #a31515;">"]),</span>
  22. <span style="color: #a31515;">      [role="tab"]:has([data-testid="</span>${<span style="color: #008080;">TARGET_TEST_ID</span>}<span style="color: #a31515;">"]) {</span>
  23. <span style="color: #a31515;">        display: none !important;</span>
  24. <span style="color: #a31515;">      }</span>
  25. <span style="color: #a31515;">    `</span>;
  26.     document.head.appendChild(style);
  27.   };

  28.   <span style="color: #0000ff;">const</span> hideTabByDom = () => {
  29.     <span style="color: #0000ff;">const</span> node = document.querySelector(<span style="color: #a31515;">`[data-testid="</span>${<span style="color: #008080;">TARGET_TEST_ID</span>}<span style="color: #a31515;">"]`</span>);
  30.     <span style="color: #0000ff;">if</span> (!node) <span style="color: #0000ff;">return</span> <span style="color: #0000ff;">false</span>;

  31.     <span style="color: #0000ff;">const</span> tabNode = node.closest(<span style="color: #a31515;">'.ant-tabs-tab, .gd-tabs-tab, [role="tab"], li, div'</span>);
  32.     <span style="color: #0000ff;">if</span> (tabNode <span style="color: #0000ff;">instanceof</span> <span style="color: #008080;">HTMLElement</span>) {
  33.       tabNode.style.setProperty(<span style="color: #a31515;">'display'</span>, <span style="color: #a31515;">'none'</span>, <span style="color: #a31515;">'important'</span>);
  34.     }

  35.     <span style="color: #0000ff;">if</span> (node <span style="color: #0000ff;">instanceof</span> <span style="color: #008080;">HTMLElement</span>) {
  36.       node.style.setProperty(<span style="color: #a31515;">'display'</span>, <span style="color: #a31515;">'none'</span>, <span style="color: #a31515;">'important'</span>);
  37.     }
  38.     <span style="color: #0000ff;">return</span> <span style="color: #0000ff;">true</span>;
  39.   };

  40.   <span style="color: #0000ff;">const</span> redirectIfSecurityPage = () => {
  41.     <span style="color: #0000ff;">if</span> (!<span style="color: #008080;">SECURITY_ROUTE_PATTERN</span>.test(window.location.pathname)) <span style="color: #0000ff;">return</span>;

  42.     <span style="color: #0000ff;">const</span> nextUrl = window.location.href.replace(/<span style="color: #cd3131;">\</span>/details<span style="color: #cd3131;">\</span>/security(?:<span style="color: #cd3131;">\</span>/[^/?<span style="color: #cd3131;">#</span>]*)?/, <span style="color: #a31515;">'/details/overview'</span>);

  43.     log(<span style="color: #a31515;">'redirect security page to overview'</span>, nextUrl);
  44.     window.history.replaceState(<span style="color: #0000ff;">null</span>, <span style="color: #a31515;">''</span>, nextUrl);
  45.     window.dispatchEvent(<span style="color: #0000ff;">new</span> <span style="color: #008080;">PopStateEvent</span>(<span style="color: #a31515;">'popstate'</span>));
  46.   };

  47.   <span style="color: #0000ff;">const</span> applyDisplayControlLog = () => {
  48.     <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>) {
  49.       log(<span style="color: #a31515;">'GD.dispatch unavailable, DOM hide only'</span>);
  50.       <span style="color: #0000ff;">return</span>;
  51.     }

  52.     window.<span style="color: #008080;">GD</span>.dispatch(<span style="color: #a31515;">'config-display-control'</span>, { hiddenKeys: [] });
  53.     <span style="color: #0000ff;">if</span> (!hasLoggedDispatch) {
  54.       hasLoggedDispatch = <span style="color: #0000ff;">true</span>;
  55.       log(<span style="color: #a31515;">'display-control checked; no verified hiddenKey for dataset data security'</span>);
  56.     }
  57.   };

  58.   <span style="color: #0000ff;">const</span> apply = () => {
  59.     injectStyle();
  60.     redirectIfSecurityPage();
  61.     <span style="color: #0000ff;">if</span> (hideTabByDom() && !hasLoggedHidden) {
  62.       hasLoggedHidden = <span style="color: #0000ff;">true</span>;
  63.       log(<span style="color: #a31515;">'data security tab hidden'</span>);
  64.     }
  65.     applyDisplayControlLog();
  66.   };

  67.   <span style="color: #0000ff;">const</span> scheduleApply = () => {
  68.     <span style="color: #0000ff;">if</span> (scheduled) <span style="color: #0000ff;">return</span>;
  69.     scheduled = <span style="color: #0000ff;">true</span>;
  70.     setTimeout(() => {
  71.       scheduled = <span style="color: #0000ff;">false</span>;
  72.       apply();
  73.     }, <span style="color: #098658;">100</span>);
  74.     apply();
  75.     setTimeout(apply, <span style="color: #098658;">300</span>);
  76.     setTimeout(apply, <span style="color: #098658;">1000</span>);
  77.     setTimeout(apply, <span style="color: #098658;">3000</span>);
  78.   };

  79.   <span style="color: #0000ff;">if</span> (document.readyState === <span style="color: #a31515;">'loading'</span>) {
  80.     document.addEventListener(<span style="color: #a31515;">'DOMContentLoaded'</span>, scheduleApply, { once: <span style="color: #0000ff;">true</span> });
  81.   } <span style="color: #0000ff;">else</span> {
  82.     scheduleApply();
  83.   }

  84.   <span style="color: #0000ff;">new</span> <span style="color: #008080;">MutationObserver</span>(scheduleApply).observe(document.documentElement, {
  85.     childList: <span style="color: #0000ff;">true</span>,
  86.     subtree: <span style="color: #0000ff;">true</span>,
  87.   });

  88.   window.addEventListener(<span style="color: #a31515;">'load'</span>, scheduleApply);
  89.   window.addEventListener(<span style="color: #a31515;">'hashchange'</span>, scheduleApply);
  90.   window.addEventListener(<span style="color: #a31515;">'popstate'</span>, scheduleApply);
  91.   document.addEventListener(<span style="color: #a31515;">'visibilitychange'</span>, () => {
  92.     <span style="color: #0000ff;">if</span> (!document.hidden) scheduleApply();
  93.   });
  94. })();</div>
复制代码




回复

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

本版积分规则

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