Skip to content

[FEAT][UI]: Role based Admin UI visibility gating#3479

Merged
crivetimihai merged 8 commits intomainfrom
feat/role-based-admin-ui-gating
Apr 2, 2026
Merged

[FEAT][UI]: Role based Admin UI visibility gating#3479
crivetimihai merged 8 commits intomainfrom
feat/role-based-admin-ui-gating

Conversation

@madhav165
Copy link
Copy Markdown
Collaborator

✨ Feature / Enhancement PR

🔗 Epic / Issue

Closes #3478


🚀 Summary (1-2 sentences)

Adds separate UI section/header hide configuration for admin vs non-admin users. Admins can retain full UI access in deployments where non-admin views are restricted, including embedded mode where logout and team selector auto-hiding now only applies to non-admins.


🧪 Checks

  • make lint passes
  • make test passes
  • CHANGELOG updated (if user-facing)

📓 Notes

New Environment Variables

Variable Applies to Default
MCPGATEWAY_UI_HIDE_SECTIONS non-admin users []
MCPGATEWAY_UI_HIDE_HEADER_ITEMS non-admin users []
MCPGATEWAY_UI_HIDE_SECTIONS_ADMIN admin users [] (see all)
MCPGATEWAY_UI_HIDE_HEADER_ITEMS_ADMIN admin users [] (see all)

Visibility Resolution

flowchart TD
    A[Request to /admin/] --> B{is_admin?}
    B -->|yes| C[Use _ADMIN env vars]
    B -->|no| D[Use existing env vars]
    D --> E{MCPGATEWAY_UI_EMBEDDED?}
    E -->|yes| F[Add logout, team_selector to hidden headers]
    E -->|no| G[No embedded defaults]
    C --> H[Apply query param / cookie overrides]
    F --> H
    G --> H
    H --> I[Map hidden sections → hidden tabs]
    I --> J[Return visibility config]
Loading

Backward Compatibility

Existing deployments without _ADMIN vars behave identically — admins see everything (empty list = no hiding), non-admin behavior unchanged.

Files Changed

  • mcpgateway/config.py — 2 new fields with shared validators
  • mcpgateway/admin.pyget_ui_visibility_config() gains is_admin param
  • .env.example — Document new vars
  • docker-compose.yml, docker-compose-embedded.yml — Add new vars
  • charts/mcp-stack/values.yaml, values.schema.json — Helm chart entries
  • docs/docs/config.schema.json — Schema entries
  • docs/docs/manage/admin-ui-customization.md — Role-based visibility docs
  • tests/unit/mcpgateway/test_config.py — 5 new tests
  • tests/unit/mcpgateway/test_admin.py — 6 new tests

@madhav165 madhav165 changed the title feat(ui): role-based admin UI visibility gating [FEAT][UI]: role-based admin UI visibility gating Mar 4, 2026
@madhav165 madhav165 changed the title [FEAT][UI]: role-based admin UI visibility gating [FEAT][UI]: Role based Admin UI visibility gating Mar 4, 2026
@crivetimihai crivetimihai added enhancement New feature or request ui User Interface SHOULD P2: Important but not vital; high-value items that are not crucial for the immediate release labels Mar 5, 2026
@crivetimihai crivetimihai added this to the Release 1.0.0-RC2 milestone Mar 5, 2026
@crivetimihai
Copy link
Copy Markdown
Member

Thanks @madhav165 — useful feature for #3478. The admin/non-admin split for hide sections config is well-designed. Good coverage across .env.example, Helm values, Docker Compose, docs, config, and tests.

@rakdutta rakdutta self-requested a review March 6, 2026 08:26
rakdutta
rakdutta previously approved these changes Mar 6, 2026
Copy link
Copy Markdown
Collaborator

@rakdutta rakdutta left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I verified all six acceptance scenarios (admin vs non-admin hide lists, admin-specific hide overrides, embedded header defaults, and query-param/cookie overrides) — behavior matches the acceptance criteria.
LGTM

@rakdutta rakdutta force-pushed the feat/role-based-admin-ui-gating branch from 77f16ff to f2f9e38 Compare March 6, 2026 12:13
@rakdutta rakdutta added the release-fix Critical bugfix required for the release label Mar 6, 2026
@madhav165 madhav165 force-pushed the feat/role-based-admin-ui-gating branch from f2f9e38 to cd40a5f Compare March 6, 2026 16:51
@crivetimihai crivetimihai self-assigned this Mar 7, 2026
@madhav165 madhav165 force-pushed the feat/role-based-admin-ui-gating branch from cd40a5f to 4d78912 Compare March 8, 2026 12:34
@madhav165 madhav165 force-pushed the feat/role-based-admin-ui-gating branch from 4d78912 to 9c4629b Compare March 9, 2026 08:50
@marekdano
Copy link
Copy Markdown
Collaborator

@madhav165 - can you please resolve conflicts?

@madhav165 madhav165 force-pushed the feat/role-based-admin-ui-gating branch 3 times, most recently from 47a1a20 to 62e33d9 Compare April 1, 2026 09:35
madhav165 and others added 6 commits April 2, 2026 13:58
Signed-off-by: Madhav Kandukuri <madhav165@gmail.com>
…dmin

Signed-off-by: Madhav Kandukuri <madhav165@gmail.com>
…and docs

Signed-off-by: Madhav Kandukuri <madhav165@gmail.com>
Signed-off-by: Madhav Kandukuri <madhav165@gmail.com>
Signed-off-by: Madhav Kandukuri <madhav165@gmail.com>
…d query+cookie interaction

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>
… config test

Address codex review gaps:
- Route-level integration test verifying admin_ui() passes is_admin
  through to get_ui_visibility_config and applies admin hide lists
- JSON-array parsing test for mcpgateway_ui_hide_header_items_admin

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>
Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>
@crivetimihai crivetimihai force-pushed the feat/role-based-admin-ui-gating branch from 62e33d9 to fdedb56 Compare April 2, 2026 14:01
Copy link
Copy Markdown
Member

@crivetimihai crivetimihai left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed and rebased onto current main. Clean implementation — the role-based branching logic is correct, embedded-mode bypass for admins works as designed, query/cookie overrides remain strictly additive (no visibility bypass), and is_admin is derived server-side from authenticated user state.

Added tests during review for full differential coverage: backward-compat default param, admin cookie/query interaction, route-level integration verifying admin_ui() wires is_admin through to get_ui_visibility_config, and JSON-array parsing for admin header items.

Resolved one rebase conflict: docs/docs/config.schema.json was deleted on main in #4001 — dropped the PR's additions to that file. Also included .secrets.baseline update for test line shifts.

@crivetimihai crivetimihai merged commit d22fc6a into main Apr 2, 2026
27 checks passed
@crivetimihai crivetimihai deleted the feat/role-based-admin-ui-gating branch April 2, 2026 14:02
jonpspri pushed a commit that referenced this pull request Apr 10, 2026
* feat(ui): add admin-specific UI hide section/header config fields

Signed-off-by: Madhav Kandukuri <madhav165@gmail.com>

* feat(ui): make get_ui_visibility_config role-aware for admin vs non-admin

Signed-off-by: Madhav Kandukuri <madhav165@gmail.com>

* docs: add admin UI hide vars to env, docker-compose, charts, schema, and docs

Signed-off-by: Madhav Kandukuri <madhav165@gmail.com>

* style: black formatting for config description

Signed-off-by: Madhav Kandukuri <madhav165@gmail.com>

* fix(config): apply section alias normalization to admin hide list

Signed-off-by: Madhav Kandukuri <madhav165@gmail.com>

* test(ui): add coverage for admin visibility default param, cookie, and query+cookie interaction

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>

* test(ui): add route-level admin visibility test and JSON-array header config test

Address codex review gaps:
- Route-level integration test verifying admin_ui() passes is_admin
  through to get_ui_visibility_config and applies admin hide lists
- JSON-array parsing test for mcpgateway_ui_hide_header_items_admin

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>

* chore: update secrets baseline after test line shifts

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>

---------

Signed-off-by: Madhav Kandukuri <madhav165@gmail.com>
Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>
Co-authored-by: Mihai Criveti <crivetimihai@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request release-fix Critical bugfix required for the release SHOULD P2: Important but not vital; high-value items that are not crucial for the immediate release ui User Interface

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[FEATURE][UI]: Role-based Admin UI visibility gating (admin vs non-admin)

4 participants