From bcab0194f169d894eab851dd3ab779b8fb213a05 Mon Sep 17 00:00:00 2001 From: Ezequiel Victorero Date: Wed, 7 Sep 2022 18:29:01 -0300 Subject: [PATCH] PublicDashboards: disable form if user does not has permissions (#54853) --- pkg/api/accesscontrol.go | 2 +- pkg/services/dashboards/accesscontrol.go | 3 +- pkg/services/publicdashboards/api/api.go | 2 +- pkg/services/publicdashboards/api/api_test.go | 2 +- .../ShareModal/SharePublicDashboard.tsx | 32 ++++++++++++------- public/app/types/accessControl.ts | 1 + 6 files changed, 26 insertions(+), 16 deletions(-) diff --git a/pkg/api/accesscontrol.go b/pkg/api/accesscontrol.go index 488b7221035..00a1c1e18e5 100644 --- a/pkg/api/accesscontrol.go +++ b/pkg/api/accesscontrol.go @@ -426,7 +426,7 @@ func (hs *HTTPServer) declareFixedRoles() error { Description: "Create, write or disable a public dashboard.", Group: "Dashboards", Permissions: []ac.Permission{ - {Action: dashboards.ActionDashboardPublicWrite, Scope: dashboards.ScopeDashboardsAll}, + {Action: dashboards.ActionDashboardsPublicWrite, Scope: dashboards.ScopeDashboardsAll}, }, }, Grants: []string{"Admin"}, diff --git a/pkg/services/dashboards/accesscontrol.go b/pkg/services/dashboards/accesscontrol.go index 8c2010459c1..3537574f630 100644 --- a/pkg/services/dashboards/accesscontrol.go +++ b/pkg/services/dashboards/accesscontrol.go @@ -28,8 +28,7 @@ const ( ActionDashboardsDelete = "dashboards:delete" ActionDashboardsPermissionsRead = "dashboards.permissions:read" ActionDashboardsPermissionsWrite = "dashboards.permissions:write" - - ActionDashboardPublicWrite = "dashboards.public:write" + ActionDashboardsPublicWrite = "dashboards.public:write" ) var ( diff --git a/pkg/services/publicdashboards/api/api.go b/pkg/services/publicdashboards/api/api.go index 62f13aff5c8..10fd66c8d3c 100644 --- a/pkg/services/publicdashboards/api/api.go +++ b/pkg/services/publicdashboards/api/api.go @@ -68,7 +68,7 @@ func (api *Api) RegisterAPIEndpoints() { routing.Wrap(api.GetPublicDashboardConfig)) api.RouteRegister.Post("/api/dashboards/uid/:uid/public-config", - auth(middleware.ReqOrgAdmin, accesscontrol.EvalPermission(dashboards.ActionDashboardPublicWrite, uidScope)), + auth(middleware.ReqOrgAdmin, accesscontrol.EvalPermission(dashboards.ActionDashboardsPublicWrite, uidScope)), routing.Wrap(api.SavePublicDashboardConfig)) } diff --git a/pkg/services/publicdashboards/api/api_test.go b/pkg/services/publicdashboards/api/api_test.go index 78e2289e44b..9bac508f113 100644 --- a/pkg/services/publicdashboards/api/api_test.go +++ b/pkg/services/publicdashboards/api/api_test.go @@ -39,7 +39,7 @@ import ( ) var userAdmin = &user.SignedInUser{UserID: 1, OrgID: 1, OrgRole: org.RoleAdmin, Login: "testAdminUser"} -var userAdminRBAC = &user.SignedInUser{UserID: 2, OrgID: 1, OrgRole: org.RoleAdmin, Login: "testAdminUserRBAC", Permissions: map[int64]map[string][]string{1: {dashboards.ActionDashboardPublicWrite: {dashboards.ScopeDashboardsAll}}}} +var userAdminRBAC = &user.SignedInUser{UserID: 2, OrgID: 1, OrgRole: org.RoleAdmin, Login: "testAdminUserRBAC", Permissions: map[int64]map[string][]string{1: {dashboards.ActionDashboardsPublicWrite: {dashboards.ScopeDashboardsAll}}}} var userViewer = &user.SignedInUser{UserID: 3, OrgID: 1, OrgRole: org.RoleViewer, Login: "testViewerUser"} var userViewerRBAC = &user.SignedInUser{UserID: 4, OrgID: 1, OrgRole: org.RoleViewer, Login: "testViewerUserRBAC", Permissions: map[int64]map[string][]string{1: {dashboards.ActionDashboardsRead: {dashboards.ScopeDashboardsAll}}}} var anonymousUser *user.SignedInUser diff --git a/public/app/features/dashboard/components/ShareModal/SharePublicDashboard.tsx b/public/app/features/dashboard/components/ShareModal/SharePublicDashboard.tsx index 892d619ddd3..d25b1afe658 100644 --- a/public/app/features/dashboard/components/ShareModal/SharePublicDashboard.tsx +++ b/public/app/features/dashboard/components/ShareModal/SharePublicDashboard.tsx @@ -18,6 +18,10 @@ import { notifyApp } from 'app/core/actions'; import { createErrorNotification } from 'app/core/copy/appNotification'; import { dispatch } from 'app/store/store'; +import { contextSrv } from '../../../../core/services/context_srv'; +import { AccessControlAction } from '../../../../types'; +import { isOrgAdmin } from '../../../plugins/admin/permissions'; + import { dashboardHasTemplateVariables, generatePublicDashboardUrl, @@ -40,6 +44,8 @@ export const SharePublicDashboard = (props: Props) => { const dashboardVariables = props.dashboard.getVariables(); const selectors = e2eSelectors.pages.ShareDashboardModal.PublicDashboard; + const hasWritePermissions = contextSrv.hasAccess(AccessControlAction.DashboardsPublicWrite, isOrgAdmin()); + const [publicDashboard, setPublicDashboardConfig] = useState({ isEnabled: false, uid: '', @@ -122,13 +128,12 @@ export const SharePublicDashboard = (props: Props) => {
Before you click Save, please acknowledge the following information:
-
+

onAcknowledge('public', e.currentTarget.checked)} /> @@ -138,7 +143,6 @@ export const SharePublicDashboard = (props: Props) => { onAcknowledge('datasources', e.currentTarget.checked)} /> @@ -156,7 +160,6 @@ export const SharePublicDashboard = (props: Props) => { onAcknowledge('usage', e.currentTarget.checked)} /> @@ -175,7 +178,7 @@ export const SharePublicDashboard = (props: Props) => {

Public Dashboard Configuration

-
+
@@ -213,6 +216,9 @@ export const SharePublicDashboard = (props: Props) => { }} /> +
+ +
{publicDashboardPersisted(publicDashboard) && publicDashboard.isEnabled && ( { )}
- {props.dashboard.hasUnsavedChanges() && ( - + {hasWritePermissions ? ( + props.dashboard.hasUnsavedChanges() && ( + + ) + ) : ( + )}