跳转至

导航栏菜单根据权限显示/隐藏

在现有的权限体系下, 全局管理可以根据用户的权限控制导航栏的菜单是否展示, 但是由于容器管理的授权信息未同步到全局管理,导致全局管理无法准确判断容器管理菜单是否需要展示。

本文通过配置实现了: 将容器管理及可观测性的菜单在 全局管理无法判断的部分, 默认不显示 , 通过 白名单 授权的方式,实现菜单的隐藏与显示(通过容器管理页面授权的集群或命名空间权限,全局管理均无法感知和判断)。

例如:A 用户在容器管理是 cluster A 的 Cluster Admin 角色, 这种情况下全局管理无法判断是否有权限展示容器管理菜单。 通过本文档配置后,用户 A 默认不可见容器管理菜单,需要 显式地在全局管理授权 才可以看到容器管理菜单。

前提条件

已开启基于权限显示/隐藏菜单的功能,开启方法如下:

  • 新安装的环境, 使用 helm install 时增加 --set global.navigatorVisibleDependency=true 参数
  • 已有环境,helm get values ghippo -n ghippo-system -o yaml 备份 values, 随后修改 bak.yaml 并添加 global.navigatorVisibleDependency: true

开启菜单隐藏

再使用以下命令升级全局管理:

helm upgrade ghippo ghippo-release/ghippo \
  -n ghippo-system \
  -f ./bak.yaml \
  --version ${version}

配置导航栏

在 kpanda-global-cluster 中 apply 如下 YAML:

apiVersion: ghippo.io/v1alpha1
kind: GProductNavigator
metadata:
  name: kpanda-menus-custom
spec:
  category: container
  gproduct: kpanda
  iconUrl: ./ui/kpanda/kpanda.svg
  isCustom: true
  localizedName:
    en-US: Container Management
    zh-CN: 容器管理
  menus:
    - iconUrl: ''
      isCustom: true
      localizedName:
        en-US: Clusters
        zh-CN: 集群列表
      name: Clusters
      order: 80
      url: ./kpanda/clusters
      visible: true
      visibleDependency:
        permissions:
          - kpanda.cluster.*
          - kpanda.menu.get
    - iconUrl: ''
      isCustom: true
      localizedName:
        en-US: Namespaces
        zh-CN: 命名空间
      name: Namespaces
      order: 70
      url: ./kpanda/namespaces
      visible: true
      visibleDependency:
        permissions:
          - kpanda.cluster.*
          - kpanda.menu.get
    - iconUrl: ''
      isCustom: true
      localizedName:
        en-US: Workloads
        zh-CN: 工作负载
      name: Workloads
      order: 60
      url: ./kpanda/workloads/deployments
      visible: true
      visibleDependency:
        permissions:
          - kpanda.cluster.*
          - kpanda.menu.get
    - iconUrl: ''
      isCustom: true
      localizedName:
        en-US: Permissions
        zh-CN: 权限管理
      name: Permissions
      order: 10
      url: ./kpanda/rbac/content/cluster
      visible: true
      visibleDependency:
        permissions:
          - kpanda.cluster.*
          - kpanda.menu.get
  name: 容器管理
  order: 50
  url: ./kpanda/clusters
  visible: true

---
apiVersion: ghippo.io/v1alpha1
kind: GProductNavigator
metadata:
  name: insight-menus-custom
spec:
  category: microservice
  gproduct: insight
  iconUrl: ./ui/insight/logo.svg
  isCustom: true
  localizedName:
    en-US: Insight
    zh-CN: 可观测性
  menus:
    - iconUrl: ''
      isCustom: true
      localizedName:
        en-US: Overview
        zh-CN: 概览
      name: Overview
      order: 9
      url: ./insight/overview
      visible: true
      visibleDependency:
        permissions:
          - kpanda.cluster.*
          - kpanda.menu.get
    - iconUrl: ''
      isCustom: true
      localizedName:
        en-US: Dashboard
        zh-CN: 仪表盘
      name: Dashboard
      order: 8
      url: ./insight/dashboard
      visible: true
      visibleDependency:
        permissions:
          - kpanda.cluster.*
          - kpanda.menu.get
    - iconUrl: ''
      isCustom: true
      localizedName:
        en-US: Infrastructure
        zh-CN: 基础设施
      name: Infrastructure
      order: 7
      url: ./insight/clusters
      visible: true
      visibleDependency:
        permissions:
          - kpanda.cluster.*
          - kpanda.menu.get
    - iconUrl: ''
      isCustom: true
      localizedName:
        en-US: Metrics
        zh-CN: 指标
      name: Metrics
      order: 6
      url: ./insight/metric/basic
      visible: true
      visibleDependency:
        permissions:
          - kpanda.cluster.*
          - kpanda.menu.get
    - iconUrl: ''
      isCustom: true
      localizedName:
        en-US: Logs
        zh-CN: 日志
      name: Logs
      order: 5
      url: ./insight/logs
      visible: true
      visibleDependency:
        permissions:
          - kpanda.cluster.*
          - kpanda.menu.get
    - iconUrl: ''
      isCustom: true
      localizedName:
        en-US: Trace Tracking
        zh-CN: 链路追踪
      name: Trace Tracking
      order: 4
      url: ./insight/topology
      visible: true
      visibleDependency:
        permissions:
          - kpanda.cluster.*
          - kpanda.menu.get
    - iconUrl: ''
      isCustom: true
      localizedName:
        en-US: Alerts
        zh-CN: 告警
      name: Alerts
      order: 3
      url: ./insight/alerts/active/metrics
      visible: true
      visibleDependency:
        permissions:
          - kpanda.cluster.*
          - kpanda.menu.get
    - iconUrl: ''
      isCustom: true
      localizedName:
        en-US: Collect Management
        zh-CN: 采集管理
      name: Collect Management
      order: 2
      url: ./insight/agents
      visible: true
      visibleDependency:
        permissions:
          - kpanda.cluster.*
          - kpanda.menu.get
    - iconUrl: ''
      isCustom: true
      localizedName:
        en-US: System Management
        zh-CN: 系统管理
      name: System Management
      order: 1
      url: ./insight/system-components
      visible: true
      visibleDependency:
        permissions:
          - kpanda.cluster.*
          - kpanda.menu.get
  name: 可观测性
  order: 30
  url: ./insight
  visible: true

---
apiVersion: ghippo.io/v1alpha1
kind: GProductResourcePermissions
metadata:
  name: kpanda-custom
spec:
  isCustom: true
  actions:
    - localizedName:
        en-US: Get
        zh-CN: 查看
      name: get
  authScopes:
    - resourcePermissions:
        - actions:
            - name: get
          resourceType: menu
      scope: platform
  gproduct: kpanda
  resourceTypes:
    - localizedName:
        en-US: Menu
        zh-CN: 菜单
      name: menu

通过自定义角色实现上述效果

Note

仅容器管理模块的菜单需要单独配置菜单权限,其他模块会根据用户的权限自动显示/隐藏

创建一个自定义角色,包含的权限点为容器管理的菜单查看权限,后续授权给需要查看容器管理菜单的用户。

授权

查看权限点

效果如下,可以看到容器管理和可观测性的导航栏菜单:

验证结果

评论