dashboard-shell-shell 3.0.5-tsh.7 → 3.0.5-tsh.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/images/logo.svg +29 -37
- package/assets/translations/en-us.yaml +4 -0
- package/assets/translations/zh-hans.yaml +42 -0
- package/components/GlobalRoleBindings.vue +21 -6
- package/components/form/Members/ClusterPermissionsEditor.vue +34 -18
- package/components/form/Members/MembershipEditor.vue +1 -1
- package/components/form/NameNsDescription.vue +2 -3
- package/components/form/ProjectMemberEditor.vue +38 -23
- package/config/product/uiplugins.js +13 -10
- package/package.json +1 -1
- package/pages/auth/login.vue +1 -1
- package/pages/c/_cluster/auth/roles/index.vue +27 -3
- package/types/shell/index.d.ts +8 -0
- package/utils/roleFiltering.js +33 -0
package/assets/images/logo.svg
CHANGED
|
@@ -8,48 +8,40 @@
|
|
|
8
8
|
<stop offset="0.488" stop-color="#2784fe"/>
|
|
9
9
|
<stop offset="1" stop-color="#0564e0"/>
|
|
10
10
|
</linearGradient>
|
|
11
|
-
<clipPath id="clip-path-2">
|
|
12
|
-
<rect id="矩形_1136" data-name="矩形 1136" width="200" height="20"/>
|
|
13
|
-
</clipPath>
|
|
14
|
-
<clipPath id="clip-云翼云管平台">
|
|
15
|
-
<rect width="330" height="50"/>
|
|
16
|
-
</clipPath>
|
|
17
11
|
</defs>
|
|
18
|
-
<g id="
|
|
19
|
-
<g id="组
|
|
20
|
-
<
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
<g id="组
|
|
24
|
-
<g id="
|
|
25
|
-
<g id="
|
|
26
|
-
<g id="组
|
|
27
|
-
<
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
<
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
<
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
<
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
<path id="路径_22162" data-name="路径 22162" d="M814.132,236.6v-6.125h-7v6.837h6.146a.875.875,0,0,0,.672-.238.687.687,0,0,0,.182-.474Zm-.875-5.414v5.425h-5.25v-5.425Z" transform="translate(-807.132 -230.476)" fill="#555"/>
|
|
46
|
-
</g>
|
|
12
|
+
<g id="组_45131" data-name="组 45131" transform="translate(-12763 -13359)">
|
|
13
|
+
<g id="组_44679" data-name="组 44679" transform="translate(3626 2783)">
|
|
14
|
+
<rect id="矩形_850" data-name="矩形 850" width="330" height="50" transform="translate(9137 10576)" fill="none"/>
|
|
15
|
+
</g>
|
|
16
|
+
<g id="组_45541" data-name="组 45541" transform="translate(12783 13358.501)">
|
|
17
|
+
<g id="组_45177" data-name="组 45177" transform="translate(0 7.999)">
|
|
18
|
+
<g id="公司logo" clip-path="url(#clip-path)">
|
|
19
|
+
<g id="组_44414" data-name="组 44414" transform="translate(0 25.142)">
|
|
20
|
+
<g id="组_44410" data-name="组 44410" transform="translate(0 0.014)">
|
|
21
|
+
<path id="路径_22151" data-name="路径 22151" d="M617.432,232.542h.593v1.7h-.593v.768h.593v2.476l-.7.219.1.737,1.983-.611v-.784l-.525.166v-2.2h.525v-.768h-.525v-1.7h.525v-.77h-1.988Z" transform="translate(-617.325 -231.606)" fill="#555"/>
|
|
22
|
+
<path id="路径_22152" data-name="路径 22152" d="M639.2,230.715v.623h-1.108v-.789h-.875v.789h-1.208v-.625h-.835v1.361h4.886v-1.361Z" transform="translate(-632.768 -230.549)" fill="#555"/>
|
|
23
|
+
<path id="路径_22153" data-name="路径 22153" d="M635.453,247.167h2.005l-.124.779H635.42v3.173h.835v-2.436h.483v2.436h.835v-2.436h.483v2.436h.875v-2.436h.483v1.668h-.254v.767h.136c.3,0,.984-.07.984-.724v-2.45h-2.07l.124-.779h1.946v-.737H635.46Z" transform="translate(-632.975 -244.289)" fill="#555"/>
|
|
24
|
+
</g>
|
|
25
|
+
<g id="组_44411" data-name="组 44411" transform="translate(8.438 0.168)">
|
|
26
|
+
<path id="路径_22154" data-name="路径 22154" d="M679.883,257.671h.7L681.3,254h-.789Z" transform="translate(-679.883 -250.988)" fill="#555"/>
|
|
27
|
+
<path id="路径_22155" data-name="路径 22155" d="M684.668,233.569h-1.613v-1.05l1.482-.126.009-.714-3.918.369h-.021v.675l1.614-.137v.98h-1.614v.768h1.614v4.025h.835v-4.025h1.613Z" transform="translate(-680.508 -231.679)" fill="#555"/>
|
|
28
|
+
<path id="路径_22156" data-name="路径 22156" d="M716.748,237.676v-5.9h-2.679v6.664h1.867a.812.812,0,0,0,.614-.224.789.789,0,0,0,.2-.539Zm-.875-5.133v5.126h-.943v-5.126Z" transform="translate(-709.467 -231.763)" fill="#555"/>
|
|
29
|
+
<path id="路径_22157" data-name="路径 22157" d="M701.875,254h-.768l.7,3.647v.018h.772l-.7-3.654Z" transform="translate(-698.246 -250.992)" fill="#555"/>
|
|
30
|
+
</g>
|
|
31
|
+
<g id="组_44412" data-name="组 44412" transform="translate(17.139 0.18)">
|
|
32
|
+
<path id="路径_22158" data-name="路径 22158" d="M753.1,231.772h-5.61v.737h6.34a.709.709,0,0,0-.73-.737Z" transform="translate(-747.075 -231.772)" fill="#555"/>
|
|
33
|
+
<path id="路径_22159" data-name="路径 22159" d="M751.571,252.082v-.768h-7.063v.768h1.8l-1.8,3.232-.019.033h6.988l-1.178-2.625-.7.525.62,1.368h-4.4l1.423-2.523Z" transform="translate(-744.489 -248.678)" fill="#555"/>
|
|
34
|
+
</g>
|
|
35
|
+
<g id="组_44413" data-name="组 44413" transform="translate(25.586 0)">
|
|
36
|
+
<path id="路径_22160" data-name="路径 22160" d="M819.715,265.124v.654l3.75.436v-.665l-3.726-.422Z" transform="translate(-818.012 -260.446)" fill="#555"/>
|
|
37
|
+
<path id="路径_22161" data-name="路径 22161" d="M817.38,242.67l2.536.3h.024v-.639l-2.424-.3,1.08-.4,2.291.822v-.681l-1.37-.488,1.074-.4v-1.29H817l-.609.574v1.134l1.05-1.039h2.24v.259l-1.12.425-1-.362-.536.488.619.222-1.246.473h-.014v.681l.982-.368Z" transform="translate(-815.144 -238.355)" fill="#555"/>
|
|
38
|
+
<path id="路径_22162" data-name="路径 22162" d="M814.132,236.6v-6.125h-7v6.837h6.146a.875.875,0,0,0,.672-.238.687.687,0,0,0,.182-.474Zm-.875-5.414v5.425h-5.25v-5.425Z" transform="translate(-807.132 -230.476)" fill="#555"/>
|
|
47
39
|
</g>
|
|
48
|
-
<path id="云" d="M19.886,20.328a14.958,14.958,0,0,0,3.968.337s7.037-.337,6.67-6.377-7.264-5-7.264-5,.017-7.181-6.854-7.181S9.7,9.292,9.7,9.292s-6.885-1.04-7.262,5c-.394,6.278,6.821,6.278,6.821,6.278-.338-.04,10.485,1.349,10.967-9.8A5.948,5.948,0,0,0,16.4,9.713c-2.64,0-3.663,1.05-3.663,1.05.161,3.683,1.392,6,2.978,7.461A5.007,5.007,0,0,1,14.427,19a2.885,2.885,0,0,1-1.14.386c-1.955-2.023-3.25-5.2-2.853-10.148a11.867,11.867,0,0,1,5.96-1.652,12.3,12.3,0,0,1,6.031,1.647C23.676,24.875,7.98,22.8,7.98,22.8S-.1,22.361,0,14.518,7.75,7.168,7.75,7.168,8.342,0,16.405,0s8.625,7.168,8.625,7.168,7.646-.5,7.749,7.348S24.8,22.8,24.8,22.8a17.752,17.752,0,0,1-7.215-.757s.687-.416,1.258-.843a11.916,11.916,0,0,0,1.038-.875Z" transform="translate(0 0.674)" fill="url(#linear-gradient)"/>
|
|
49
40
|
</g>
|
|
41
|
+
<path id="云" d="M19.886,20.328a14.958,14.958,0,0,0,3.968.337s7.037-.337,6.67-6.377-7.264-5-7.264-5,.017-7.181-6.854-7.181S9.7,9.292,9.7,9.292s-6.885-1.04-7.262,5c-.394,6.278,6.821,6.278,6.821,6.278-.338-.04,10.485,1.349,10.967-9.8A5.948,5.948,0,0,0,16.4,9.713c-2.64,0-3.663,1.05-3.663,1.05.161,3.683,1.392,6,2.978,7.461A5.007,5.007,0,0,1,14.427,19a2.885,2.885,0,0,1-1.14.386c-1.955-2.023-3.25-5.2-2.853-10.148a11.867,11.867,0,0,1,5.96-1.652,12.3,12.3,0,0,1,6.031,1.647C23.676,24.875,7.98,22.8,7.98,22.8S-.1,22.361,0,14.518,7.75,7.168,7.75,7.168,8.342,0,16.405,0s8.625,7.168,8.625,7.168,7.646-.5,7.749,7.348S24.8,22.8,24.8,22.8a17.752,17.752,0,0,1-7.215-.757s.687-.416,1.258-.843a11.916,11.916,0,0,0,1.038-.875Z" transform="translate(0 0.674)" fill="url(#linear-gradient)"/>
|
|
50
42
|
</g>
|
|
51
|
-
<path id="路径_23779" data-name="路径 23779" d="M2.028-12.428H14.385v2.2H2.028ZM.562-7.491H15.853v2.2h-7.4A46.32,46.32,0,0,1,4.736-.787q3.353-.024,6.457-.191L9.028-3.638,10.953-4.8q3.131,3.535,4.882,5.892L13.753,2.428q-.35-.525-.9-1.274a92.832,92.832,0,0,0-10.773.668L1.057-.294a21.447,21.447,0,0,0,4.394-5H.562ZM16.854-9.472l2.914-.406q-1.242-.462-2.31-.772l.406-.971h-1.09v-1.146h7.278v4.252H22.141v-3.106H18.359q1.178.35,2.508.859l-.35.78,1.249-.191q-.016.574.016,1.225-2.151.287-4.714.749Zm7.724-.08,2.739-.334q-1.265-.478-2.357-.8l.415-.94h-.843v-1.146h7.087v4.252H29.706v-3.106H25.924q1.433.437,2.46.843l-.374.8,1.314-.175a6.452,6.452,0,0,0,.1,1.178q-2.007.222-4.539.653Zm-7.9,8.528H20.6v-.668H17.411V-2.84H20.6v-.668h-2.66v-4.7h13.09v4.7H28.288v.668h3.139v1.146H28.288v.668h3.934V.2H26.727q2.667.406,5.239.892l-.605,1.4L25.438,1.267,26.019.2H22.834L23.4,1.218q-2.866.765-5.813,1.321-.332-.747-.682-1.447Q19.42.711,21.849.2H16.679ZM29.006-7.061H25.478v.684H29Zm-9.046.684h3.5v-.684h-3.5Zm9.046,1.72V-5.34H25.478v.684Zm-9.046,0h3.5V-5.34h-3.5Zm2.676,1.815h3.615V-3.51H22.634Zm0,1.815h3.615V-1.7H22.634Zm12.008-11.4H47v2.2H34.643ZM33.178-7.491H48.465v2.2h-7.4A46.319,46.319,0,0,1,37.35-.787Q40.7-.812,43.807-.978l-2.158-2.66L43.56-4.8Q46.7-1.265,48.45,1.092L46.364,2.428q-.35-.525-.9-1.274a92.832,92.832,0,0,0-10.773.668L33.673-.3a21.448,21.448,0,0,0,4.4-5H33.178Zm16.467-1.5h.828q-.366-.478-1.274-1.449a7.845,7.845,0,0,0,2.516-2.9h2.2q-.255.574-.541,1.1h4.109v1.514H54.421q.478.525.94,1.05l-.924.684h1.545q-.144-.415-.287-.843l1.8-.3q.175.558.35,1.146h3.663q-.653-.828-1.146-1.354l.493-.381h-.717a11.2,11.2,0,0,1-1.178,1.545q-.462-.35-1.689-1.162a10.4,10.4,0,0,0,1.879-2.994h2.214a11.255,11.255,0,0,1-.43,1.1h3.675v1.514h-2.38q.43.462.843.924l-1.115.812h2.6v2.292H62.383v-.679H51.81V-6.7H49.643ZM61.4-.451H53.3V.473h8.09Zm-.509-3.631v-.859H53.3v.859Zm-10.383-4.9h3.216q-.43-.541-1-1.225l.653-.509h-1.05A10.425,10.425,0,0,1,50.5-8.987ZM62.959-6.4v3.79H53.3v.7h10.16v4.34H61.4V1.92H53.3v.507H51.141V-6.408ZM65.666-4.73h6.475v-5.845H66.366v-2.1H80.444v2.1H74.566V-4.73h6.576v2.1H74.566V2.323h-2.42V-2.63H65.671Zm.924-4.412,1.673-1.13q1.529,1.783,3.169,3.95L69.507-5.048q-1.613-2.443-2.919-4.1Zm13.886.159Q78.787-6.959,76.909-5L75.282-6.322a36.344,36.344,0,0,0,3.313-3.934Zm12.787-2.436q2.45,2.389,4.539,4.7l-1.767,1.5L94.792-6.688q-6.848.112-11.9.574l-.843-1.879A27.464,27.464,0,0,0,88.26-13.5l2.086,1.13Q88.085-10.24,85.568-8.2l7.66-.271L91.6-10.256ZM83.547,2.366V-5.1H95.809V2.372H93.644v-.94H85.713v.94Zm10.1-5.495H85.713V-.547h7.931Z" transform="translate(43.836 30.683)" fill="#555"/>
|
|
52
43
|
</g>
|
|
44
|
+
<path id="路径_23779" data-name="路径 23779" d="M2.028-12.428H14.385v2.2H2.028ZM.562-7.491H15.853v2.2h-7.4A46.32,46.32,0,0,1,4.736-.787q3.353-.024,6.457-.191L9.028-3.638,10.953-4.8q3.131,3.535,4.882,5.892L13.753,2.428q-.35-.525-.9-1.274a92.832,92.832,0,0,0-10.773.668L1.057-.294a21.447,21.447,0,0,0,4.394-5H.562ZM16.854-9.472l2.914-.406q-1.242-.462-2.31-.772l.406-.971h-1.09v-1.146h7.278v4.252H22.141v-3.106H18.359q1.178.35,2.508.859l-.35.78,1.249-.191q-.016.574.016,1.225-2.151.287-4.714.749Zm7.724-.08,2.739-.334q-1.265-.478-2.357-.8l.415-.94h-.843v-1.146h7.087v4.252H29.706v-3.106H25.924q1.433.437,2.46.843l-.374.8,1.314-.175a6.452,6.452,0,0,0,.1,1.178q-2.007.222-4.539.653Zm-7.9,8.528H20.6v-.668H17.411V-2.84H20.6v-.668h-2.66v-4.7h13.09v4.7H28.288v.668h3.139v1.146H28.288v.668h3.934V.2H26.727q2.667.406,5.239.892l-.605,1.4L25.438,1.267,26.019.2H22.834L23.4,1.218q-2.866.765-5.813,1.321-.332-.747-.682-1.447Q19.42.711,21.849.2H16.679ZM29.006-7.061H25.478v.684H29Zm-9.046.684h3.5v-.684h-3.5Zm9.046,1.72V-5.34H25.478v.684Zm-9.046,0h3.5V-5.34h-3.5Zm2.676,1.815h3.615V-3.51H22.634Zm0,1.815h3.615V-1.7H22.634Zm12.008-11.4H47v2.2H34.643ZM33.178-7.491H48.465v2.2h-7.4A46.319,46.319,0,0,1,37.35-.787Q40.7-.812,43.807-.978l-2.158-2.66L43.56-4.8Q46.7-1.265,48.45,1.092L46.364,2.428q-.35-.525-.9-1.274a92.832,92.832,0,0,0-10.773.668L33.673-.3a21.448,21.448,0,0,0,4.4-5H33.178Zm16.467-1.5h.828q-.366-.478-1.274-1.449a7.845,7.845,0,0,0,2.516-2.9h2.2q-.255.574-.541,1.1h4.109v1.514H54.421q.478.525.94,1.05l-.924.684h1.545q-.144-.415-.287-.843l1.8-.3q.175.558.35,1.146h3.663q-.653-.828-1.146-1.354l.493-.381h-.717a11.2,11.2,0,0,1-1.178,1.545q-.462-.35-1.689-1.162a10.4,10.4,0,0,0,1.879-2.994h2.214a11.255,11.255,0,0,1-.43,1.1h3.675v1.514h-2.38q.43.462.843.924l-1.115.812h2.6v2.292H62.383v-.679H51.81V-6.7H49.643ZM61.4-.451H53.3V.473h8.09Zm-.509-3.631v-.859H53.3v.859Zm-10.383-4.9h3.216q-.43-.541-1-1.225l.653-.509h-1.05A10.425,10.425,0,0,1,50.5-8.987ZM62.959-6.4v3.79H53.3v.7h10.16v4.34H61.4V1.92H53.3v.507H51.141V-6.408ZM65.666-4.73h6.475v-5.845H66.366v-2.1H80.444v2.1H74.566V-4.73h6.576v2.1H74.566V2.323h-2.42V-2.63H65.671Zm.924-4.412,1.673-1.13q1.529,1.783,3.169,3.95L69.507-5.048q-1.613-2.443-2.919-4.1Zm13.886.159Q78.787-6.959,76.909-5L75.282-6.322a36.344,36.344,0,0,0,3.313-3.934Zm12.787-2.436q2.45,2.389,4.539,4.7l-1.767,1.5L94.792-6.688q-6.848.112-11.9.574l-.843-1.879A27.464,27.464,0,0,0,88.26-13.5l2.086,1.13Q88.085-10.24,85.568-8.2l7.66-.271L91.6-10.256ZM83.547,2.366V-5.1H95.809V2.372H93.644v-.94H85.713v.94Zm10.1-5.495H85.713V-.547h7.931Z" transform="translate(43.836 30.683)" fill="#555"/>
|
|
53
45
|
</g>
|
|
54
46
|
</g>
|
|
55
47
|
</svg>
|
|
@@ -7648,6 +7648,10 @@ typeDescription:
|
|
|
7648
7648
|
management.cattle.io.setting: 统一配置平台基础选项与全局设置,支持CA证书、密码规则、域名、Token时效等核心配置。
|
|
7649
7649
|
management.cattle.io.user: 用于管理用户账号,支持创建、维护用户信息,可设置用户权限、管理密码等,保障系统资源仅由授权用户访问,提升系统安全性。
|
|
7650
7650
|
harvesterhci.io.management.cluster: 提供虚拟化集群的实时健康状态监控、版本号管理及资源负载管理,支持批量导入/删除集群、配置调优与权限分级功能,实现高效运维管控。
|
|
7651
|
+
harvesterhci.io.logging.clusterflow: 集群流用于展示集群内的事件与操作日志,帮助您实时监控集群状态、追踪资源变更,提升问题排查与运维效率。
|
|
7652
|
+
harvesterhci.io.logging.clusteroutput: 集群输出用于集中展示集群运行过程中的日志与输出信息,帮助您分析系统行为、定位问题并优化集群性能。
|
|
7653
|
+
harvesterhci.io.logging.flow: 流用于实时展示系统内各类事件与操作记录,帮助您监控资源变化、追踪操作过程,提升系统可观测性与运维效率。
|
|
7654
|
+
harvesterhci.io.logging.output: 输出用于查看系统或服务运行产生的日志与结果信息,帮助您及时了解运行状态并进行故障排查。
|
|
7651
7655
|
typeLabel:
|
|
7652
7656
|
management.cattle.io.oidcclient: |-
|
|
7653
7657
|
{count, plural,
|
|
@@ -3264,6 +3264,18 @@ members:
|
|
|
3264
3264
|
viewClusterCatalogs: 查看集群应用商店
|
|
3265
3265
|
viewClusterMembers: 查看集群成员
|
|
3266
3266
|
viewNodes: 查看节点
|
|
3267
|
+
safe-admin:
|
|
3268
|
+
label: 安全管理员
|
|
3269
|
+
description: 负责用户、角色及基础配置管理,保障系统权限与安全策略的合规性。
|
|
3270
|
+
project-tenant:
|
|
3271
|
+
label: 租户
|
|
3272
|
+
description: 租户可管理资源组及其中的虚机、网络等资源。
|
|
3273
|
+
cluster-tenant:
|
|
3274
|
+
label: 租户
|
|
3275
|
+
description: 租户可管理资源组及其中的虚机、网络等资源。
|
|
3276
|
+
tenant:
|
|
3277
|
+
label: 租户
|
|
3278
|
+
description: 租户可管理资源组及其中的虚机、网络等资源。
|
|
3267
3279
|
owner:
|
|
3268
3280
|
label: 所有者
|
|
3269
3281
|
description: 所有者对集群和集群内的所有资源拥有完全的控制权。
|
|
@@ -4502,6 +4514,12 @@ projectMembers:
|
|
|
4502
4514
|
description: 控制用户对项目的访问权限
|
|
4503
4515
|
noDescription: 已创建用户 - 没有描述
|
|
4504
4516
|
searchForMember: 搜索需要向其提供项目访问权限的成员
|
|
4517
|
+
safe-admin:
|
|
4518
|
+
label: 安全管理员
|
|
4519
|
+
description: 负责用户、角色及基础配置管理,保障系统权限与安全策略的合规性。
|
|
4520
|
+
tenant:
|
|
4521
|
+
label: 租户
|
|
4522
|
+
description: 租户可管理资源组及其中的虚机、网络等资源。
|
|
4505
4523
|
owner:
|
|
4506
4524
|
label: 所有者
|
|
4507
4525
|
description: 所有者对项目和项目内的所有资源拥有完全的控制权限。
|
|
@@ -4765,6 +4783,9 @@ rbac:
|
|
|
4765
4783
|
description: 无描述
|
|
4766
4784
|
assignOnlyRole: 已分配该角色
|
|
4767
4785
|
role:
|
|
4786
|
+
cluster-tenant:
|
|
4787
|
+
label: 租户
|
|
4788
|
+
description: 租户可管理资源组及其中的虚机、网络等资源。
|
|
4768
4789
|
admin:
|
|
4769
4790
|
label: 管理员
|
|
4770
4791
|
description: 管理员可以完全控制整个安装以及所有集群中的所有资源。
|
|
@@ -4774,6 +4795,12 @@ rbac:
|
|
|
4774
4795
|
user-base:
|
|
4775
4796
|
label: User-Base 用户
|
|
4776
4797
|
description: User-Base 用户只拥有登录权限。
|
|
4798
|
+
tenant:
|
|
4799
|
+
label: 租户
|
|
4800
|
+
description: 租户可管理资源组及其中的虚机、网络等资源。
|
|
4801
|
+
safe-admin:
|
|
4802
|
+
label: 安全管理员
|
|
4803
|
+
description: 负责用户、角色及基础配置管理,保障系统权限与安全策略的合规性。
|
|
4777
4804
|
clusters-create:
|
|
4778
4805
|
label: 创建集群
|
|
4779
4806
|
description: 允许用户创建集群,并成为该集群的所有者(owner)。普通用户默认拥有此权限。
|
|
@@ -6544,6 +6571,7 @@ model:
|
|
|
6544
6571
|
label: Service Account 用户名
|
|
6545
6572
|
projectMember:
|
|
6546
6573
|
role:
|
|
6574
|
+
tenant: 租户
|
|
6547
6575
|
member: 成员
|
|
6548
6576
|
owner: 所有者
|
|
6549
6577
|
readonly: 只读用户
|
|
@@ -6639,6 +6667,10 @@ typeDescription:
|
|
|
6639
6667
|
batch.cronjob: CronJob 创建 Job,然后按照重复调度来运行 Pod。该调度以标准的 Unix cron 格式表示,并使用 Kubernetes Control Plane 的时区(通常是 UTC)。
|
|
6640
6668
|
batch.job: Job 创建一个或多个 Pod。 Job 通过运行 Pod 直到其成功退出,以可靠执行一次性任务。失败的 Pod 会自动被替换,直到达到指定的完成运行次数。Job 还可以并行运行多个 Pod,或作为批处理工作队列。
|
|
6641
6669
|
pod: Pod 是你可以在 Kubernetes 中创建和管理的最小可部署计算单元。Pod 是一个或多个容器,具有共享的存储和网络资源以及运行容器的规范。
|
|
6670
|
+
harvesterhci.io.logging.clusterflow: 集群流用于展示集群内的事件与操作日志,帮助您实时监控集群状态、追踪资源变更,提升问题排查与运维效率。
|
|
6671
|
+
harvesterhci.io.logging.clusteroutput: 集群输出用于集中展示集群运行过程中的日志与输出信息,帮助您分析系统行为、定位问题并优化集群性能。
|
|
6672
|
+
harvesterhci.io.logging.flow: 流用于实时展示系统内各类事件与操作记录,帮助您监控资源变化、追踪操作过程,提升系统可观测性与运维效率。
|
|
6673
|
+
harvesterhci.io.logging.output: 输出用于查看系统或服务运行产生的日志与结果信息,帮助您及时了解运行状态并进行故障排查。
|
|
6642
6674
|
typeLabel:
|
|
6643
6675
|
management.cattle.io.project: |-
|
|
6644
6676
|
{count, plural,
|
|
@@ -8087,3 +8119,13 @@ component:
|
|
|
8087
8119
|
keyValue:
|
|
8088
8120
|
noRows: 此资源上没有配置{propertyName}.
|
|
8089
8121
|
showConfiguration: 显示配置
|
|
8122
|
+
|
|
8123
|
+
|
|
8124
|
+
|
|
8125
|
+
customConversion:
|
|
8126
|
+
Tenant: 租户
|
|
8127
|
+
Cluster Owner: 所有者
|
|
8128
|
+
Project Owner: 项目负责人
|
|
8129
|
+
|
|
8130
|
+
|
|
8131
|
+
|
|
@@ -103,21 +103,36 @@ export default {
|
|
|
103
103
|
this.sortedRoles.global.push(...remainingGlobalRoles);
|
|
104
104
|
// End sort of global roles
|
|
105
105
|
|
|
106
|
-
|
|
107
|
-
|
|
106
|
+
if (!(sessionStorage.getItem('TOPLEVELPERMISSIONS') && sessionStorage.getItem('TOPLEVELPERMISSIONS') === 'superadmin')) {
|
|
107
|
+
delete this.sortedRoles.builtin
|
|
108
|
+
delete this.sortedRoles.custom
|
|
109
|
+
}
|
|
108
110
|
|
|
109
111
|
this.update();
|
|
110
112
|
}
|
|
111
113
|
} catch (e) { }
|
|
112
114
|
},
|
|
113
115
|
data() {
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
116
|
+
|
|
117
|
+
let globalPermissions = [
|
|
118
|
+
'admin',
|
|
119
|
+
'safe-admin',
|
|
120
|
+
'tenant',
|
|
121
|
+
]
|
|
122
|
+
|
|
123
|
+
if (sessionStorage.getItem('TOPLEVELPERMISSIONS') === 'superadmin') {
|
|
124
|
+
globalPermissions = [
|
|
117
125
|
'admin',
|
|
126
|
+
'safe-admin',
|
|
118
127
|
'user',
|
|
119
128
|
'user-base',
|
|
120
|
-
|
|
129
|
+
'tenant',
|
|
130
|
+
]
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
return {
|
|
134
|
+
// This not only identifies global roles but the order here is the order we want to display them in the UI
|
|
135
|
+
globalPermissions,
|
|
121
136
|
globalRoleBindings: null,
|
|
122
137
|
sortedRoles: null,
|
|
123
138
|
selectedRoles: [],
|
|
@@ -143,30 +143,46 @@ export default {
|
|
|
143
143
|
return [this.permissionGroup];
|
|
144
144
|
},
|
|
145
145
|
options() {
|
|
146
|
+
|
|
146
147
|
const customRoles = this.customRoles.map((role) => ({
|
|
147
148
|
label: role.nameDisplay,
|
|
148
149
|
description: role.description || role.metadata?.annotations?.[DESCRIPTION] || this.t('members.clusterPermissions.noDescription'),
|
|
149
150
|
value: role.id
|
|
150
151
|
}));
|
|
151
152
|
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
153
|
+
let optionList = [{
|
|
154
|
+
label: this.t('members.clusterPermissions.cluster-tenant.label'),
|
|
155
|
+
description: this.t('members.clusterPermissions.cluster-tenant.description'),
|
|
156
|
+
value: 'cluster-tenant'
|
|
157
|
+
}];
|
|
158
|
+
|
|
159
|
+
if (sessionStorage.getItem('TOPLEVELPERMISSIONS') === 'superadmin') {
|
|
160
|
+
optionList = [
|
|
161
|
+
{
|
|
162
|
+
label: this.t('members.clusterPermissions.cluster-tenant.label'),
|
|
163
|
+
description: this.t('members.clusterPermissions.cluster-tenant.description'),
|
|
164
|
+
value: 'cluster-tenant'
|
|
165
|
+
},
|
|
166
|
+
{
|
|
167
|
+
label: this.t('members.clusterPermissions.owner.label'),
|
|
168
|
+
description: this.t('members.clusterPermissions.owner.description'),
|
|
169
|
+
value: 'owner'
|
|
170
|
+
},
|
|
171
|
+
{
|
|
172
|
+
label: this.t('members.clusterPermissions.member.label'),
|
|
173
|
+
description: this.t('members.clusterPermissions.member.description'),
|
|
174
|
+
value: 'member'
|
|
175
|
+
},
|
|
176
|
+
...customRoles,
|
|
177
|
+
{
|
|
178
|
+
label: this.t('members.clusterPermissions.custom.label'),
|
|
179
|
+
description: this.t('members.clusterPermissions.custom.description'),
|
|
180
|
+
value: 'custom'
|
|
181
|
+
}
|
|
182
|
+
];
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
return optionList
|
|
170
186
|
},
|
|
171
187
|
principal() {
|
|
172
188
|
const principalId = this.principalId.replace(/\//g, '%2F');
|
|
@@ -191,7 +191,7 @@ export default {
|
|
|
191
191
|
:data-testid="`role-item-${i}`"
|
|
192
192
|
class="col span-6 role"
|
|
193
193
|
>
|
|
194
|
-
{{ row.value.roleDisplay }}
|
|
194
|
+
{{ $store.getters['i18n/withFallback'](`customConversion.${row.value.roleDisplay}`, row.value.roleDisplay) }}
|
|
195
195
|
</div>
|
|
196
196
|
</div>
|
|
197
197
|
</template>
|
|
@@ -514,9 +514,8 @@ export default {
|
|
|
514
514
|
</div>
|
|
515
515
|
|
|
516
516
|
<!-- 自定义插槽,可插入额外内容 -->
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
</div>
|
|
517
|
+
<slot name="customize" />
|
|
518
|
+
|
|
520
519
|
<!-- <div
|
|
521
520
|
v-show="!descriptionHidden"
|
|
522
521
|
:data-testid="componentTestid + '-description'"
|
|
@@ -166,29 +166,44 @@ export default {
|
|
|
166
166
|
value: this.purifyOption(role.id),
|
|
167
167
|
}));
|
|
168
168
|
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
169
|
+
let optionList = [{
|
|
170
|
+
label: this.t('members.clusterPermissions.project-tenant.label'),
|
|
171
|
+
description: this.t('members.clusterPermissions.project-tenant.description'),
|
|
172
|
+
value: 'project-tenant'
|
|
173
|
+
}];
|
|
174
|
+
|
|
175
|
+
if (sessionStorage.getItem('TOPLEVELPERMISSIONS') === 'superadmin') {
|
|
176
|
+
optionList = [
|
|
177
|
+
{
|
|
178
|
+
label: this.t('members.clusterPermissions.project-tenant.label'),
|
|
179
|
+
description: this.t('members.clusterPermissions.project-tenant.description'),
|
|
180
|
+
value: 'project-tenant'
|
|
181
|
+
},
|
|
182
|
+
{
|
|
183
|
+
label: this.t('projectMembers.projectPermissions.owner.label'),
|
|
184
|
+
description: this.t('projectMembers.projectPermissions.owner.description'),
|
|
185
|
+
value: 'owner'
|
|
186
|
+
},
|
|
187
|
+
{
|
|
188
|
+
label: this.t('projectMembers.projectPermissions.member.label'),
|
|
189
|
+
description: this.t('projectMembers.projectPermissions.member.description'),
|
|
190
|
+
value: 'member'
|
|
191
|
+
},
|
|
192
|
+
{
|
|
193
|
+
label: this.t('projectMembers.projectPermissions.readOnly.label'),
|
|
194
|
+
description: this.t('projectMembers.projectPermissions.readOnly.description'),
|
|
195
|
+
value: 'read-only'
|
|
196
|
+
},
|
|
197
|
+
...customRoles,
|
|
198
|
+
{
|
|
199
|
+
label: this.t('projectMembers.projectPermissions.custom.label'),
|
|
200
|
+
description: this.t('projectMembers.projectPermissions.custom.description'),
|
|
201
|
+
value: 'custom'
|
|
202
|
+
}
|
|
203
|
+
];
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
return optionList
|
|
192
207
|
},
|
|
193
208
|
customPermissionsUpdate() {
|
|
194
209
|
return this.customPermissions.reduce((acc, customPermissionsItem) => {
|
|
@@ -5,14 +5,17 @@ export const NAME = 'uiplugins';
|
|
|
5
5
|
export function init(store) {
|
|
6
6
|
const { product } = DSL(store, NAME);
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
8
|
+
if (sessionStorage.getItem('TOPLEVELPERMISSIONS') && sessionStorage.getItem('TOPLEVELPERMISSIONS') === 'superadmin') {
|
|
9
|
+
// Add a product for UI Plugins - will appear in the top-level menu
|
|
10
|
+
product({
|
|
11
|
+
ifHave: IF_HAVE.ADMIN, // Only admins can see the UI Plugin Custom Resource by default
|
|
12
|
+
inStore: 'management',
|
|
13
|
+
icon: 'extension',
|
|
14
|
+
removable: false,
|
|
15
|
+
showClusterSwitcher: false,
|
|
16
|
+
category: 'configuration',
|
|
17
|
+
weight: 50,
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
|
|
18
21
|
}
|
package/package.json
CHANGED
package/pages/auth/login.vue
CHANGED
|
@@ -311,7 +311,7 @@ export default {
|
|
|
311
311
|
this.$store.dispatch('auth/setInitialPass', this.password);
|
|
312
312
|
this.$router.push({ name: 'auth-setup' });
|
|
313
313
|
} else {
|
|
314
|
-
this.$router.push({ name: '
|
|
314
|
+
this.$router.push({ name: 'index' });
|
|
315
315
|
}
|
|
316
316
|
} catch (err) {
|
|
317
317
|
// 登录失败处理
|
|
@@ -7,6 +7,7 @@ import Loading from '@shell/components/Loading';
|
|
|
7
7
|
import { SUBTYPE_MAPPING, CREATE_VERBS } from '@shell/models/management.cattle.io.roletemplate';
|
|
8
8
|
import { NAME } from '@shell/config/product/auth';
|
|
9
9
|
import { BLANK_CLUSTER } from '@shell/store/store-types.js';
|
|
10
|
+
import { globalRoleFilteringfn, clusterRoleFilteringfn, projectRoleFilteringfn } from '@shell/utils/roleFiltering'
|
|
10
11
|
|
|
11
12
|
const GLOBAL = SUBTYPE_MAPPING.GLOBAL.key;
|
|
12
13
|
const CLUSTER = SUBTYPE_MAPPING.CLUSTER.key;
|
|
@@ -99,15 +100,38 @@ export default {
|
|
|
99
100
|
|
|
100
101
|
computed: {
|
|
101
102
|
globalResources() {
|
|
102
|
-
|
|
103
|
+
|
|
104
|
+
let rolesList = globalRoleFilteringfn(this.globalRoles)
|
|
105
|
+
|
|
106
|
+
if (sessionStorage.getItem('TOPLEVELPERMISSIONS') === 'superadmin') {
|
|
107
|
+
rolesList = this.globalRoles
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
return rolesList
|
|
103
111
|
},
|
|
104
112
|
|
|
105
113
|
clusterResources() {
|
|
106
|
-
|
|
114
|
+
const roleList = this.roleTemplates.filter((r) => r.context === SUBTYPE_MAPPING.CLUSTER.context);
|
|
115
|
+
|
|
116
|
+
let rolesList = clusterRoleFilteringfn(roleList)
|
|
117
|
+
|
|
118
|
+
if (sessionStorage.getItem('TOPLEVELPERMISSIONS') === 'superadmin') {
|
|
119
|
+
rolesList = roleList
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
return rolesList
|
|
107
123
|
},
|
|
108
124
|
|
|
109
125
|
namespaceResources() {
|
|
110
|
-
|
|
126
|
+
const roleList = this.roleTemplates.filter((r) => r.context === SUBTYPE_MAPPING.NAMESPACE.context);
|
|
127
|
+
|
|
128
|
+
let rolesList = projectRoleFilteringfn(roleList)
|
|
129
|
+
|
|
130
|
+
if (sessionStorage.getItem('TOPLEVELPERMISSIONS') === 'superadmin') {
|
|
131
|
+
rolesList = roleList
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
return rolesList
|
|
111
135
|
},
|
|
112
136
|
|
|
113
137
|
type() {
|
package/types/shell/index.d.ts
CHANGED
|
@@ -4354,6 +4354,14 @@ export function deferred(name: any): {
|
|
|
4354
4354
|
export function setPromiseResult(promise: any, obj: any, key: any, label: any): void;
|
|
4355
4355
|
}
|
|
4356
4356
|
|
|
4357
|
+
// @shell/utils/roleFiltering
|
|
4358
|
+
|
|
4359
|
+
declare module '@shell/utils/roleFiltering' {
|
|
4360
|
+
export function globalRoleFilteringfn(ary: any): any;
|
|
4361
|
+
export function clusterRoleFilteringfn(ary: any): any;
|
|
4362
|
+
export function projectRoleFilteringfn(ary: any): any;
|
|
4363
|
+
}
|
|
4364
|
+
|
|
4357
4365
|
// @shell/utils/router
|
|
4358
4366
|
|
|
4359
4367
|
declare module '@shell/utils/router' {
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
export function globalRoleFilteringfn (ary) {
|
|
2
|
+
const roleList = ['admin', 'tenant', 'safe-admin']
|
|
3
|
+
if (ary && ary.length > 0) {
|
|
4
|
+
return ary.filter(item => { return roleList.includes(item.id) })
|
|
5
|
+
}
|
|
6
|
+
return []
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export function clusterRoleFilteringfn (ary) {
|
|
10
|
+
const roleList = ['cluster-tenant']
|
|
11
|
+
if (ary && ary.length > 0) {
|
|
12
|
+
ary.map(m => {
|
|
13
|
+
if (m.id === 'cluster-tenant') {
|
|
14
|
+
m['displayName'] = '租户'
|
|
15
|
+
}
|
|
16
|
+
})
|
|
17
|
+
return ary.filter(item => { return roleList.includes(item.id) })
|
|
18
|
+
}
|
|
19
|
+
return []
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export function projectRoleFilteringfn (ary) {
|
|
23
|
+
const roleList = ['project-tenant']
|
|
24
|
+
ary.map(m => {
|
|
25
|
+
if (m.id === 'project-tenant') {
|
|
26
|
+
m['displayName'] = '租户'
|
|
27
|
+
}
|
|
28
|
+
})
|
|
29
|
+
if (ary && ary.length > 0) {
|
|
30
|
+
return ary.filter(item => { return roleList.includes(item.id) })
|
|
31
|
+
}
|
|
32
|
+
return []
|
|
33
|
+
}
|