Skip to content

[Write-restricted dashboards] Add 'NEW' badge to access mode container#244746

Merged
kowalczyk-krzysztof merged 1 commit intoelastic:security/read-only-dashboardsfrom
kowalczyk-krzysztof:feat/new-badge-access-mode_container
Dec 2, 2025
Merged

[Write-restricted dashboards] Add 'NEW' badge to access mode container#244746
kowalczyk-krzysztof merged 1 commit intoelastic:security/read-only-dashboardsfrom
kowalczyk-krzysztof:feat/new-badge-access-mode_container

Conversation

@kowalczyk-krzysztof
Copy link
Member

@kowalczyk-krzysztof kowalczyk-krzysztof commented Dec 1, 2025

Summary

This PR adds "new" badge to access mode container. This will later need to be removed as part of #244735

Screenshot 2025-12-01 at 12 39 00 Screenshot 2025-12-01 at 12 39 43

Closes: #244734

@kowalczyk-krzysztof kowalczyk-krzysztof self-assigned this Dec 1, 2025
@kowalczyk-krzysztof kowalczyk-krzysztof requested a review from a team as a code owner December 1, 2025 11:43
@kowalczyk-krzysztof kowalczyk-krzysztof added release_note:skip Skip the PR/issue when compiling release notes backport:skip This PR does not require backporting Team:SharedUX Platform AppEx-SharedUX (formerly Global Experience) t// labels Dec 1, 2025
@elasticmachine
Copy link
Contributor

Pinging @elastic/appex-sharedux (Team:SharedUX)

@elasticmachine
Copy link
Contributor

💚 Build Succeeded

Metrics [docs]

Async chunks

Total size of all lazy-loaded chunks that will be downloaded as the user navigates the app

id before after diff
dashboard 685.4KB 685.7KB +318.0B

cc @kowalczyk-krzysztof

@kowalczyk-krzysztof kowalczyk-krzysztof merged commit bf2e2a8 into elastic:security/read-only-dashboards Dec 2, 2025
20 checks passed
@kowalczyk-krzysztof kowalczyk-krzysztof deleted the feat/new-badge-access-mode_container branch December 2, 2025 08:08
SiddharthMantri added a commit that referenced this pull request Dec 12, 2025
Closes elastic/kibana-team#808

The respective teams have been raising PRs against this feature branch.
Approved PRs merged so far:
- #221916
- #224411 
- #239973 
- #241101
- #238468
- #233552
- #228416 
- #241168
- #244746
- #244830

## Summary
This pull request overhauls the saved object management workflow by
introducing the concept of ownership for SOs - specifically enabled for
dashboards only at the moment. Owners and administrators can now control
a new write-restricted flag on their objects, allowing them to keep work
draft/uneditable state before publishing. This change enables users to
define who can modify shared objects, providing a crucial capability to
manage and share dashboards.


## Release note
Kibana Dashboards now support ownership and "write_restricted" mode.
Users can now keep dashboards publicly editable or in a write-restricted
state until they are ready to publish, giving them more control over who
can edit their dashboards, regardless of broader space permissions.


## How to test

### Serverless
Please reach out to me via slack or in the project channel
(#read-only-dashboards) to be invited to the serverless environment
where this feature has been enabled.

### Local

- Clone this PR
- Enable the feature by editing kibana.yml to include 
```
savedObjects.enableAccessControl: true
```
- Start ES and Kibana as you would
- Once started, seed Kibana with sample data. This should create a few
dashboards.
- Navigate to dashboards and create a new one.
- In the share modal, change the view mode `Everybody in the space Can
View`,
<img width="500" height="410" alt="image"
src="https://github.com/user-attachments/assets/b895442f-cce3-41a6-8b47-d206a9afbf43"
/>

- Now create a new role which grants access to indices and dashboards
all. Create a new user and then assign that role to the newly created
user.
<img width="500" height="410" alt="image"
src="https://github.com/user-attachments/assets/dd5251e1-a3b5-41a8-abc1-7e67399d65d2"
/>

- Login as the new user and navigate to the dashboard you had initially
set as `Can view`. You'll see that you're not able to edit the dashboard
and a warning like
<img width="500" height="410" alt="Screenshot 2025-11-28 at 12 30 50"
src="https://github.com/user-attachments/assets/1f71ccc7-9dc6-4a68-9a2c-540aa74e4f03"
/>



###  Local (2nd option)

You can also follow the instructions in
#224411 that detail how to use
the funtional test runner to test this using the test plugin created for
this feature.

### Risk matrix

- What happens when your feature is used in a non-default space or a
custom
  space? Works as expected
- What happens when there are multiple Kibana nodes using the same
Elasticsearch
  cluster? Does not depend on functionality of kibana nodes
- What happens when a plugin you depend on is disabled? Changes are in
core and security - both are always available
- What happens when a feature you depend on is disabled? No dependency
- What happens when a third party integration you depend on is not
responding? No third party inregration
- Does the feature work in Elastic Cloud? Yes
- Does the feature create a setting that needs to be exposed, or
configured
  differently than the default, on the Elastic Cloud? No
- Is there a significant performance impact that may affect Cloud Kibana
  instances? No
- Does your feature need to be aware of running in a container? No
- Does the feature Work with security disabled, or fails gracefully? If
disabled, fails gracefully.
- Are there performance risks associated with your feature? No
- Could this cause memory to leak in either the browser or server? No
- Will your feature still work if Kibana is run behind a reverse proxy?
Yes
- Does your feature affect other plugins? No, other plugins could choose
to use it if registering a SO with ownable types
- Are migrations handled gracefully? Does the feature affect old indices
or saved objects? Yes, migrations taken care of.
- Are you using any technologies, protocols, techniques, conventions,
libraries, NPM modules, etc. that may be new or unprecedented in Kibana?
No

---------

Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com>
Co-authored-by: Elastic Machine <elasticmachine@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Jeramy Soucy <jeramy.soucy@elastic.co>
Co-authored-by: Aleh Zasypkin <aleh.zasypkin@gmail.com>
Co-authored-by: Christiane (Tina) Heiligers <christiane.heiligers@elastic.co>
Co-authored-by: Krzysztof Kowalczyk <krzysztof.kowalczyk@elastic.co>
Co-authored-by: Gerard Soldevila <gerard.soldevila@elastic.co>
seanrathier pushed a commit to seanrathier/kibana that referenced this pull request Dec 15, 2025
Closes elastic/kibana-team#808

The respective teams have been raising PRs against this feature branch.
Approved PRs merged so far:
- elastic#221916
- elastic#224411 
- elastic#239973 
- elastic#241101
- elastic#238468
- elastic#233552
- elastic#228416 
- elastic#241168
- elastic#244746
- elastic#244830

## Summary
This pull request overhauls the saved object management workflow by
introducing the concept of ownership for SOs - specifically enabled for
dashboards only at the moment. Owners and administrators can now control
a new write-restricted flag on their objects, allowing them to keep work
draft/uneditable state before publishing. This change enables users to
define who can modify shared objects, providing a crucial capability to
manage and share dashboards.


## Release note
Kibana Dashboards now support ownership and "write_restricted" mode.
Users can now keep dashboards publicly editable or in a write-restricted
state until they are ready to publish, giving them more control over who
can edit their dashboards, regardless of broader space permissions.


## How to test

### Serverless
Please reach out to me via slack or in the project channel
(#read-only-dashboards) to be invited to the serverless environment
where this feature has been enabled.

### Local

- Clone this PR
- Enable the feature by editing kibana.yml to include 
```
savedObjects.enableAccessControl: true
```
- Start ES and Kibana as you would
- Once started, seed Kibana with sample data. This should create a few
dashboards.
- Navigate to dashboards and create a new one.
- In the share modal, change the view mode `Everybody in the space Can
View`,
<img width="500" height="410" alt="image"
src="https://github.com/user-attachments/assets/b895442f-cce3-41a6-8b47-d206a9afbf43"
/>

- Now create a new role which grants access to indices and dashboards
all. Create a new user and then assign that role to the newly created
user.
<img width="500" height="410" alt="image"
src="https://github.com/user-attachments/assets/dd5251e1-a3b5-41a8-abc1-7e67399d65d2"
/>

- Login as the new user and navigate to the dashboard you had initially
set as `Can view`. You'll see that you're not able to edit the dashboard
and a warning like
<img width="500" height="410" alt="Screenshot 2025-11-28 at 12 30 50"
src="https://github.com/user-attachments/assets/1f71ccc7-9dc6-4a68-9a2c-540aa74e4f03"
/>



###  Local (2nd option)

You can also follow the instructions in
elastic#224411 that detail how to use
the funtional test runner to test this using the test plugin created for
this feature.

### Risk matrix

- What happens when your feature is used in a non-default space or a
custom
  space? Works as expected
- What happens when there are multiple Kibana nodes using the same
Elasticsearch
  cluster? Does not depend on functionality of kibana nodes
- What happens when a plugin you depend on is disabled? Changes are in
core and security - both are always available
- What happens when a feature you depend on is disabled? No dependency
- What happens when a third party integration you depend on is not
responding? No third party inregration
- Does the feature work in Elastic Cloud? Yes
- Does the feature create a setting that needs to be exposed, or
configured
  differently than the default, on the Elastic Cloud? No
- Is there a significant performance impact that may affect Cloud Kibana
  instances? No
- Does your feature need to be aware of running in a container? No
- Does the feature Work with security disabled, or fails gracefully? If
disabled, fails gracefully.
- Are there performance risks associated with your feature? No
- Could this cause memory to leak in either the browser or server? No
- Will your feature still work if Kibana is run behind a reverse proxy?
Yes
- Does your feature affect other plugins? No, other plugins could choose
to use it if registering a SO with ownable types
- Are migrations handled gracefully? Does the feature affect old indices
or saved objects? Yes, migrations taken care of.
- Are you using any technologies, protocols, techniques, conventions,
libraries, NPM modules, etc. that may be new or unprecedented in Kibana?
No

---------

Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com>
Co-authored-by: Elastic Machine <elasticmachine@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Jeramy Soucy <jeramy.soucy@elastic.co>
Co-authored-by: Aleh Zasypkin <aleh.zasypkin@gmail.com>
Co-authored-by: Christiane (Tina) Heiligers <christiane.heiligers@elastic.co>
Co-authored-by: Krzysztof Kowalczyk <krzysztof.kowalczyk@elastic.co>
Co-authored-by: Gerard Soldevila <gerard.soldevila@elastic.co>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

backport:skip This PR does not require backporting release_note:skip Skip the PR/issue when compiling release notes Team:SharedUX Platform AppEx-SharedUX (formerly Global Experience) t//

2 participants