# What this PR does - remove hardcoded references to "Admin" and "Editor". Instead, use the `determineRequiredAuthString` and `generateMissingPermissionMessage` methods from `utils/authorization` which conditionally show the permission or role depending on whether RBAC is enabled or not - fix bug on list users page that always showed "Loading...".  - only show users the user's table if they are allowed, otherwise show them this - RBAC enabled  - RBAC disabled  - `Schedules Editor` role minor issue - Viewers are not allowed to list users by default, so granting schedule edit permission to them won’t allow them to see who rotations are assigned to or assign a rotation to a user. To make this a more straightforward user experience, instead of saying "No options found", we will tell the user that they are missing a particular role/permission to view these users: Before:  After:  ## Which issue(s) this PR fixes - closes #971 ## Checklist - [x] Tests updated - [ ] Documentation added (N/A) - [x] `CHANGELOG.md` updated
600 lines
20 KiB
JSON
600 lines
20 KiB
JSON
{
|
|
"$schema": "https://raw.githubusercontent.com/grafana/grafana/master/docs/sources/developers/plugins/plugin.schema.json",
|
|
"type": "app",
|
|
"name": "Grafana OnCall",
|
|
"id": "grafana-oncall-app",
|
|
"info": {
|
|
"description": "Incident Response Manager",
|
|
"author": {
|
|
"name": "Grafana Labs",
|
|
"url": "https://grafana.com"
|
|
},
|
|
"keywords": ["oncall", "irm", "incident", "response"],
|
|
"logos": {
|
|
"small": "img/logo.svg",
|
|
"large": "img/logo.svg"
|
|
},
|
|
"links": [
|
|
{
|
|
"name": "Website",
|
|
"url": "https://github.com/grafana/oncall"
|
|
},
|
|
{
|
|
"name": "License",
|
|
"url": "https://github.com/grafana/oncall/blob/main/LICENSE"
|
|
}
|
|
],
|
|
"screenshots": [{ "name": "Escalation chain", "path": "img/screenshot.png" }],
|
|
"version": "%VERSION%",
|
|
"updated": "%TODAY%"
|
|
},
|
|
"includes": [
|
|
{
|
|
"type": "page",
|
|
"name": "Incidents",
|
|
"path": "/a/grafana-oncall-app/incidents",
|
|
"role": "Viewer",
|
|
"action": "grafana-oncall-app.alert-groups:read",
|
|
"defaultNav": true,
|
|
"addToNav": true
|
|
},
|
|
{
|
|
"type": "page",
|
|
"name": "Users",
|
|
"path": "/a/grafana-oncall-app/users",
|
|
"role": "Viewer",
|
|
"action": "grafana-oncall-app.user-settings:read",
|
|
"addToNav": true
|
|
},
|
|
{
|
|
"type": "page",
|
|
"name": "Integrations",
|
|
"path": "/a/grafana-oncall-app/integrations",
|
|
"role": "Viewer",
|
|
"action": "grafana-oncall-app.integrations:read",
|
|
"addToNav": true
|
|
},
|
|
{
|
|
"type": "page",
|
|
"name": "Escalation Chains",
|
|
"path": "/a/grafana-oncall-app/escalations",
|
|
"role": "Viewer",
|
|
"action": "grafana-oncall-app.escalation-chains:read",
|
|
"addToNav": true
|
|
},
|
|
{
|
|
"type": "page",
|
|
"name": "Schedules",
|
|
"path": "/a/grafana-oncall-app/schedules",
|
|
"role": "Viewer",
|
|
"action": "grafana-oncall-app.schedules:read",
|
|
"addToNav": true
|
|
},
|
|
|
|
{
|
|
"type": "page",
|
|
"name": "Outgoing Webhooks",
|
|
"path": "/a/grafana-oncall-app/outgoing_webhooks",
|
|
"role": "Viewer",
|
|
"action": "grafana-oncall-app.outgoing-webhooks:read",
|
|
"addToNav": true
|
|
},
|
|
{
|
|
"type": "page",
|
|
"name": "Maintenance",
|
|
"path": "/a/grafana-oncall-app/maintenance",
|
|
"role": "Viewer",
|
|
"action": "grafana-oncall-app.maintenance:read",
|
|
"addToNav": true
|
|
},
|
|
{
|
|
"type": "page",
|
|
"name": "Settings",
|
|
"path": "/a/grafana-oncall-app/settings",
|
|
"role": "Viewer",
|
|
"action": "grafana-oncall-app.other-settings:read",
|
|
"addToNav": true
|
|
}
|
|
],
|
|
"routes": [
|
|
{
|
|
"path": "api/internal/v1/plugin/install",
|
|
"method": "*",
|
|
"url": "{{ .JsonData.onCallApiUrl }}/api/internal/v1/plugin/install",
|
|
"headers": [
|
|
{
|
|
"name": "X-Instance-Context",
|
|
"content": "{ \"stack_id\": \"{{ .JsonData.stackId }}\", \"org_id\": \"{{ .JsonData.orgId }}\", \"grafana_token\": \"{{ .SecureJsonData.grafanaToken }}\" }"
|
|
},
|
|
{
|
|
"name": "Authorization",
|
|
"content": "{{ .SecureJsonData.onCallApiToken }}"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"path": "api/internal/v1/plugin/self-hosted/install",
|
|
"method": "*",
|
|
"url": "{{ .JsonData.onCallApiUrl }}/api/internal/v1/plugin/self-hosted/install",
|
|
"headers": [
|
|
{
|
|
"name": "X-Instance-Context",
|
|
"content": "{ \"grafana_token\": \"{{ .SecureJsonData.grafanaToken }}\" }"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"path": "api/internal/v1/plugin/sync",
|
|
"method": "*",
|
|
"url": "{{ .JsonData.onCallApiUrl }}/api/internal/v1/plugin/sync",
|
|
"headers": [
|
|
{
|
|
"name": "X-Instance-Context",
|
|
"content": "{ \"stack_id\": \"{{ .JsonData.stackId }}\", \"org_id\": \"{{ .JsonData.orgId }}\" }"
|
|
},
|
|
{
|
|
"name": "Authorization",
|
|
"content": "{{ .SecureJsonData.onCallApiToken }}"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"path": "api/internal/v1/plugin/*",
|
|
"method": "*",
|
|
"url": "{{ .JsonData.onCallApiUrl }}/api/internal/v1/plugin/",
|
|
"headers": [
|
|
{
|
|
"name": "X-Instance-Context",
|
|
"content": "{ \"stack_id\": \"{{ .JsonData.stackId }}\", \"org_id\": \"{{ .JsonData.orgId }}\" }"
|
|
},
|
|
{
|
|
"name": "Authorization",
|
|
"content": "{{ .SecureJsonData.onCallApiToken }}"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"path": "api/internal/v1/login/slack-install-free/",
|
|
"method": "*",
|
|
"url": "{{ .JsonData.onCallApiUrl }}/api/internal/v1/login/slack-install-free/",
|
|
"headers": [
|
|
{
|
|
"name": "X-Instance-Context",
|
|
"content": "{ \"stack_id\": \"{{ .JsonData.stackId }}\", \"org_id\": \"{{ .JsonData.orgId }}\" }"
|
|
},
|
|
{
|
|
"name": "Authorization",
|
|
"content": "{{ .SecureJsonData.onCallApiToken }}"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"path": "api/internal/v1/*",
|
|
"method": "*",
|
|
"url": "{{ .JsonData.onCallApiUrl }}/api/internal/v1/",
|
|
"headers": [
|
|
{
|
|
"name": "X-Instance-Context",
|
|
"content": "{ \"stack_id\": \"{{ .JsonData.stackId }}\", \"org_id\": \"{{ .JsonData.orgId }}\" }"
|
|
},
|
|
{
|
|
"name": "Authorization",
|
|
"content": "{{ .SecureJsonData.onCallApiToken }}"
|
|
}
|
|
]
|
|
}
|
|
],
|
|
"roles": [
|
|
{
|
|
"role": {
|
|
"name": "Admin",
|
|
"description": "Read/write access to everything in OnCall",
|
|
"permissions": [
|
|
{ "action": "plugins.app:access", "scope": "plugins:id:grafana-oncall-app" },
|
|
|
|
{ "action": "grafana-oncall-app.alert-groups:read" },
|
|
{ "action": "grafana-oncall-app.alert-groups:write" },
|
|
|
|
{ "action": "grafana-oncall-app.integrations:read" },
|
|
{ "action": "grafana-oncall-app.integrations:write" },
|
|
{ "action": "grafana-oncall-app.integrations:test" },
|
|
|
|
{ "action": "grafana-oncall-app.escalation-chains:read" },
|
|
{ "action": "grafana-oncall-app.escalation-chains:write" },
|
|
|
|
{ "action": "grafana-oncall-app.schedules:read" },
|
|
{ "action": "grafana-oncall-app.schedules:write" },
|
|
{ "action": "grafana-oncall-app.schedules:export" },
|
|
|
|
{ "action": "grafana-oncall-app.chatops:read" },
|
|
{ "action": "grafana-oncall-app.chatops:write" },
|
|
{ "action": "grafana-oncall-app.chatops:update-settings" },
|
|
|
|
{ "action": "grafana-oncall-app.outgoing-webhooks:read" },
|
|
{ "action": "grafana-oncall-app.outgoing-webhooks:write" },
|
|
|
|
{ "action": "grafana-oncall-app.maintenance:read" },
|
|
{ "action": "grafana-oncall-app.maintenance:write" },
|
|
|
|
{ "action": "grafana-oncall-app.api-keys:read" },
|
|
{ "action": "grafana-oncall-app.api-keys:write" },
|
|
|
|
{ "action": "grafana-oncall-app.notifications:read" },
|
|
|
|
{ "action": "grafana-oncall-app.notification-settings:read" },
|
|
{ "action": "grafana-oncall-app.notification-settings:write" },
|
|
|
|
{ "action": "grafana-oncall-app.user-settings:read" },
|
|
{ "action": "grafana-oncall-app.user-settings:write" },
|
|
{ "action": "grafana-oncall-app.user-settings:admin" },
|
|
|
|
{ "action": "grafana-oncall-app.other-settings:read" },
|
|
{ "action": "grafana-oncall-app.other-settings:write" }
|
|
],
|
|
"hidden": true
|
|
},
|
|
"grants": ["Grafana Admin", "Admin"]
|
|
},
|
|
{
|
|
"role": {
|
|
"name": "Editor",
|
|
"description": "Similar to the Admin role, minus the abilities to: create Integrations, create Escalation Chains, create Outgoing Webhooks, update ChatOps settings, update other user's settings, and update general OnCall setings.",
|
|
"permissions": [
|
|
{ "action": "plugins.app:access", "scope": "plugins:id:grafana-oncall-app" },
|
|
|
|
{ "action": "grafana-oncall-app.alert-groups:read" },
|
|
{ "action": "grafana-oncall-app.alert-groups:write" },
|
|
|
|
{ "action": "grafana-oncall-app.integrations:read" },
|
|
{ "action": "grafana-oncall-app.integrations:test" },
|
|
|
|
{ "action": "grafana-oncall-app.escalation-chains:read" },
|
|
|
|
{ "action": "grafana-oncall-app.schedules:read" },
|
|
{ "action": "grafana-oncall-app.schedules:write" },
|
|
{ "action": "grafana-oncall-app.schedules:export" },
|
|
|
|
{ "action": "grafana-oncall-app.chatops:read" },
|
|
{ "action": "grafana-oncall-app.chatops:write" },
|
|
|
|
{ "action": "grafana-oncall-app.outgoing-webhooks:read" },
|
|
|
|
{ "action": "grafana-oncall-app.maintenance:read" },
|
|
{ "action": "grafana-oncall-app.maintenance:write" },
|
|
|
|
{ "action": "grafana-oncall-app.notifications:read" },
|
|
|
|
{ "action": "grafana-oncall-app.notification-settings:read" },
|
|
{ "action": "grafana-oncall-app.notification-settings:write" },
|
|
|
|
{ "action": "grafana-oncall-app.user-settings:read" },
|
|
{ "action": "grafana-oncall-app.user-settings:write" },
|
|
|
|
{ "action": "grafana-oncall-app.other-settings:read" }
|
|
]
|
|
},
|
|
"grants": ["Editor"]
|
|
},
|
|
{
|
|
"role": {
|
|
"name": "Reader",
|
|
"description": "Read-only access to everything in OnCall",
|
|
"permissions": [
|
|
{ "action": "plugins.app:access", "scope": "plugins:id:grafana-oncall-app" },
|
|
|
|
{ "action": "grafana-oncall-app.alert-groups:read" },
|
|
{ "action": "grafana-oncall-app.integrations:read" },
|
|
{ "action": "grafana-oncall-app.escalation-chains:read" },
|
|
{ "action": "grafana-oncall-app.schedules:read" },
|
|
{ "action": "grafana-oncall-app.chatops:read" },
|
|
{ "action": "grafana-oncall-app.outgoing-webhooks:read" },
|
|
{ "action": "grafana-oncall-app.maintenance:read" },
|
|
{ "action": "grafana-oncall-app.notification-settings:read" },
|
|
{ "action": "grafana-oncall-app.user-settings:read" },
|
|
{ "action": "grafana-oncall-app.other-settings:read" }
|
|
]
|
|
},
|
|
"grants": ["Viewer"]
|
|
},
|
|
{
|
|
"role": {
|
|
"name": "OnCaller",
|
|
"description": "Grants read access to everything in OnCall. In addition, grants edit access to Alert Groups and Schedules",
|
|
"permissions": [
|
|
{ "action": "plugins.app:access", "scope": "plugins:id:grafana-oncall-app" },
|
|
|
|
{ "action": "grafana-oncall-app.alert-groups:read" },
|
|
{ "action": "grafana-oncall-app.alert-groups:write" },
|
|
|
|
{ "action": "grafana-oncall-app.integrations:read" },
|
|
{ "action": "grafana-oncall-app.escalation-chains:read" },
|
|
|
|
{ "action": "grafana-oncall-app.schedules:read" },
|
|
{ "action": "grafana-oncall-app.schedules:write" },
|
|
|
|
{ "action": "grafana-oncall-app.chatops:read" },
|
|
{ "action": "grafana-oncall-app.outgoing-webhooks:read" },
|
|
{ "action": "grafana-oncall-app.maintenance:read" },
|
|
{ "action": "grafana-oncall-app.notification-settings:read" },
|
|
{ "action": "grafana-oncall-app.user-settings:read" },
|
|
{ "action": "grafana-oncall-app.other-settings:read" }
|
|
]
|
|
},
|
|
"grants": []
|
|
},
|
|
{
|
|
"role": {
|
|
"name": "Alert Groups Reader",
|
|
"description": "Read-only access to OnCall Alert Groups",
|
|
"permissions": [
|
|
{ "action": "plugins.app:access", "scope": "plugins:id:grafana-oncall-app" },
|
|
{ "action": "grafana-oncall-app.alert-groups:read" }
|
|
]
|
|
},
|
|
"grants": []
|
|
},
|
|
{
|
|
"role": {
|
|
"name": "Alert Groups Editor",
|
|
"description": "Read/write access to OnCall Alert Groups",
|
|
"permissions": [
|
|
{ "action": "plugins.app:access", "scope": "plugins:id:grafana-oncall-app" },
|
|
{ "action": "grafana-oncall-app.alert-groups:read" },
|
|
{ "action": "grafana-oncall-app.alert-groups:write" }
|
|
]
|
|
},
|
|
"grants": []
|
|
},
|
|
{
|
|
"role": {
|
|
"name": "Integrations Reader",
|
|
"description": "Read-only access to OnCall Integrations",
|
|
"permissions": [
|
|
{ "action": "plugins.app:access", "scope": "plugins:id:grafana-oncall-app" },
|
|
{ "action": "grafana-oncall-app.integrations:read" }
|
|
]
|
|
},
|
|
"grants": []
|
|
},
|
|
{
|
|
"role": {
|
|
"name": "Integrations Editor",
|
|
"description": "Read/write access to OnCall Integrations",
|
|
"permissions": [
|
|
{ "action": "plugins.app:access", "scope": "plugins:id:grafana-oncall-app" },
|
|
{ "action": "grafana-oncall-app.integrations:read" },
|
|
{ "action": "grafana-oncall-app.integrations:write" },
|
|
{ "action": "grafana-oncall-app.integrations:test" }
|
|
]
|
|
},
|
|
"grants": []
|
|
},
|
|
{
|
|
"role": {
|
|
"name": "Escalation Chains Reader",
|
|
"description": "Read-only access to OnCall Escalation Chains",
|
|
"permissions": [
|
|
{ "action": "plugins.app:access", "scope": "plugins:id:grafana-oncall-app" },
|
|
{ "action": "grafana-oncall-app.escalation-chains:read" }
|
|
]
|
|
},
|
|
"grants": []
|
|
},
|
|
{
|
|
"role": {
|
|
"name": "Escalation Chains Editor",
|
|
"description": "Read/write access to OnCall Escalation Chains",
|
|
"permissions": [
|
|
{ "action": "plugins.app:access", "scope": "plugins:id:grafana-oncall-app" },
|
|
{ "action": "grafana-oncall-app.escalation-chains:read" },
|
|
{ "action": "grafana-oncall-app.escalation-chains:write" }
|
|
]
|
|
},
|
|
"grants": []
|
|
},
|
|
{
|
|
"role": {
|
|
"name": "Schedules Reader",
|
|
"description": "Read-only access to OnCall Schedules",
|
|
"permissions": [
|
|
{ "action": "plugins.app:access", "scope": "plugins:id:grafana-oncall-app" },
|
|
{ "action": "grafana-oncall-app.schedules:read" }
|
|
]
|
|
},
|
|
"grants": []
|
|
},
|
|
{
|
|
"role": {
|
|
"name": "Schedules Editor",
|
|
"description": "Read/write access to OnCall Schedules",
|
|
"permissions": [
|
|
{ "action": "plugins.app:access", "scope": "plugins:id:grafana-oncall-app" },
|
|
{ "action": "grafana-oncall-app.schedules:read" },
|
|
{ "action": "grafana-oncall-app.schedules:write" },
|
|
{ "action": "grafana-oncall-app.schedules:export" }
|
|
]
|
|
},
|
|
"grants": []
|
|
},
|
|
{
|
|
"role": {
|
|
"name": "ChatOps Reader",
|
|
"description": "Read-only access to OnCall ChatOps",
|
|
"permissions": [
|
|
{ "action": "plugins.app:access", "scope": "plugins:id:grafana-oncall-app" },
|
|
{ "action": "grafana-oncall-app.chatops:read" }
|
|
]
|
|
},
|
|
"grants": []
|
|
},
|
|
{
|
|
"role": {
|
|
"name": "ChatOps Editor",
|
|
"description": "Read/write access to OnCall ChatOps",
|
|
"permissions": [
|
|
{ "action": "plugins.app:access", "scope": "plugins:id:grafana-oncall-app" },
|
|
{ "action": "grafana-oncall-app.chatops:read" },
|
|
{ "action": "grafana-oncall-app.chatops:write" },
|
|
{ "action": "grafana-oncall-app.chatops:update-settings" }
|
|
]
|
|
},
|
|
"grants": []
|
|
},
|
|
{
|
|
"role": {
|
|
"name": "Outgoing Webhooks Reader",
|
|
"description": "Read-only access to OnCall Outgoing Webhooks",
|
|
"permissions": [
|
|
{ "action": "plugins.app:access", "scope": "plugins:id:grafana-oncall-app" },
|
|
{ "action": "grafana-oncall-app.outgoing-webhooks:read" }
|
|
]
|
|
},
|
|
"grants": []
|
|
},
|
|
{
|
|
"role": {
|
|
"name": "Outgoing Webhooks Editor",
|
|
"description": "Read/write access to OnCall Outgoing Webhooks",
|
|
"permissions": [
|
|
{ "action": "plugins.app:access", "scope": "plugins:id:grafana-oncall-app" },
|
|
{ "action": "grafana-oncall-app.outgoing-webhooks:read" },
|
|
{ "action": "grafana-oncall-app.outgoing-webhooks:write" }
|
|
]
|
|
},
|
|
"grants": []
|
|
},
|
|
{
|
|
"role": {
|
|
"name": "Maintenance Reader",
|
|
"description": "Read-only access to OnCall Maintenance",
|
|
"permissions": [
|
|
{ "action": "plugins.app:access", "scope": "plugins:id:grafana-oncall-app" },
|
|
{ "action": "grafana-oncall-app.maintenance:read" }
|
|
]
|
|
},
|
|
"grants": []
|
|
},
|
|
{
|
|
"role": {
|
|
"name": "Maintenance Editor",
|
|
"description": "Read/write access to OnCall Maintenance",
|
|
"permissions": [
|
|
{ "action": "plugins.app:access", "scope": "plugins:id:grafana-oncall-app" },
|
|
{ "action": "grafana-oncall-app.maintenance:read" },
|
|
{ "action": "grafana-oncall-app.maintenance:write" }
|
|
]
|
|
},
|
|
"grants": []
|
|
},
|
|
{
|
|
"role": {
|
|
"name": "API Keys Reader",
|
|
"description": "Read-only access to OnCall API Keys",
|
|
"permissions": [
|
|
{ "action": "plugins.app:access", "scope": "plugins:id:grafana-oncall-app" },
|
|
{ "action": "grafana-oncall-app.api-keys:read" }
|
|
]
|
|
},
|
|
"grants": []
|
|
},
|
|
{
|
|
"role": {
|
|
"name": "API Keys Editor",
|
|
"description": "Read/write access to OnCall API Keys. Also grants access to be able to consume the API.",
|
|
"permissions": [
|
|
{ "action": "plugins.app:access", "scope": "plugins:id:grafana-oncall-app" },
|
|
{ "action": "grafana-oncall-app.api-keys:read" },
|
|
{ "action": "grafana-oncall-app.api-keys:write" }
|
|
]
|
|
},
|
|
"grants": []
|
|
},
|
|
{
|
|
"role": {
|
|
"name": "Notification Settings Reader",
|
|
"description": "Read-only access to OnCall Notification Settings",
|
|
"permissions": [
|
|
{ "action": "plugins.app:access", "scope": "plugins:id:grafana-oncall-app" },
|
|
{ "action": "grafana-oncall-app.notification-settings:read" }
|
|
]
|
|
},
|
|
"grants": []
|
|
},
|
|
{
|
|
"role": {
|
|
"name": "Notification Settings Editor",
|
|
"description": "Read/write access to OnCall Notification Settings",
|
|
"permissions": [
|
|
{ "action": "plugins.app:access", "scope": "plugins:id:grafana-oncall-app" },
|
|
{ "action": "grafana-oncall-app.notification-settings:read" },
|
|
{ "action": "grafana-oncall-app.notification-settings:write" }
|
|
]
|
|
},
|
|
"grants": []
|
|
},
|
|
{
|
|
"role": {
|
|
"name": "User Settings Reader",
|
|
"description": "Read-only access to own OnCall User Settings",
|
|
"permissions": [
|
|
{ "action": "plugins.app:access", "scope": "plugins:id:grafana-oncall-app" },
|
|
{ "action": "grafana-oncall-app.user-settings:read" }
|
|
]
|
|
},
|
|
"grants": []
|
|
},
|
|
{
|
|
"role": {
|
|
"name": "User Settings Editor",
|
|
"description": "Read/write access to own OnCall User Settings + ability to view basic information about other OnCall users",
|
|
"permissions": [
|
|
{ "action": "plugins.app:access", "scope": "plugins:id:grafana-oncall-app" },
|
|
{ "action": "grafana-oncall-app.user-settings:read" },
|
|
{ "action": "grafana-oncall-app.user-settings:write" }
|
|
]
|
|
},
|
|
"grants": []
|
|
},
|
|
{
|
|
"role": {
|
|
"name": "User Settings Admin",
|
|
"description": "Read/write access to your own, plus other's OnCall User Settings",
|
|
"permissions": [
|
|
{ "action": "plugins.app:access", "scope": "plugins:id:grafana-oncall-app" },
|
|
{ "action": "grafana-oncall-app.user-settings:read" },
|
|
{ "action": "grafana-oncall-app.user-settings:write" },
|
|
{ "action": "grafana-oncall-app.user-settings:admin" }
|
|
]
|
|
},
|
|
"grants": []
|
|
},
|
|
{
|
|
"role": {
|
|
"name": "Settings Reader",
|
|
"description": "Read-only access to OnCall Settings",
|
|
"permissions": [
|
|
{ "action": "plugins.app:access", "scope": "plugins:id:grafana-oncall-app" },
|
|
{ "action": "grafana-oncall-app.other-settings:read" }
|
|
]
|
|
},
|
|
"grants": []
|
|
},
|
|
{
|
|
"role": {
|
|
"name": "Settings Editor",
|
|
"description": "Read/write access to OnCall Settings",
|
|
"permissions": [
|
|
{ "action": "plugins.app:access", "scope": "plugins:id:grafana-oncall-app" },
|
|
{ "action": "grafana-oncall-app.other-settings:read" },
|
|
{ "action": "grafana-oncall-app.other-settings:write" }
|
|
]
|
|
},
|
|
"grants": []
|
|
}
|
|
],
|
|
"dependencies": {
|
|
"grafanaDependency": ">=8.3.2",
|
|
"grafanaVersion": "8.3",
|
|
"plugins": []
|
|
}
|
|
}
|