Portal Community

Grafana Roles

RolePermissionsTypical Assignment
ViewerView dashboards and panels; cannot edit or create; can use Explore (if granted)Business stakeholders, tenant admins viewing their own data
EditorAll Viewer permissions + create/edit dashboards, panels, alerts; cannot manage users or data sourcesOperations engineers, on-call engineers
AdminAll Editor permissions + manage users, teams, data sources, plugins, and organization settingsPlatform engineering team lead
Server AdminSuper-admin: manages Organizations, global settings, and all usersGrafana infrastructure owner (one or two people)

Organizations

Grafana Organizations are fully isolated namespaces — separate dashboards, data sources, users, and alert rules. A BizFirstGO deployment may use Organizations to separate environments:

# Recommended Organization structure for BizFirstGO

Organization 1: Production
  - Data sources: Loki-prod, Prometheus-prod, Tempo-prod
  - Dashboards: All pre-built BizFirstGO dashboards (read-only provisioned)
  - Users: Platform team (Admin/Editor), Operations (Viewer), On-Call (Editor)

Organization 2: Staging
  - Data sources: Loki-staging, Prometheus-staging, Tempo-staging
  - Dashboards: Same dashboards, pointing to staging data sources
  - Users: All engineers (Editor), QA team (Viewer)

Organization 3: Development
  - Data sources: Loki-dev, Prometheus-dev, Tempo-dev
  - Users: All developers (Editor)
  - Note: More permissive — developers can create experimental dashboards
One User, Multiple Organizations

A Grafana user can be a member of multiple Organizations with different roles in each. An engineer may be an Editor in the Development org but a Viewer-only in Production. Switch between Organizations using the top-left Organization switcher in Grafana.

Teams and Dashboard Folder Permissions

Within an Organization, Teams control access to specific dashboard folders:

# Grafana team-based access configuration
# (via API or provisioning)

Teams in Production Org:
  - platform-team: Editor on all folders
  - operations-team: Viewer on /BizFirstGO/, Editor on /Runbooks/
  - tenant-ops: Viewer on /Tenant-Health/ only

# Dashboard folders with permissions:
/BizFirstGO/                → All teams: Viewer
  /BizFirstGO/PreBuilt/     → platform-team: Editor, others: Viewer
  /BizFirstGO/Runbooks/     → operations-team: Editor
  /BizFirstGO/Tenant-Health/ → tenant-ops: Viewer (their data only)

Data Source Permissions

Data source permissions control which users and teams can query a data source directly (via Explore) — not just through dashboards. By default, all Editors can query all data sources. Restrict if tenants should not cross-query each other's data:

# Grafana data source permissions (Grafana Enterprise feature)
# Or use Loki's built-in multi-tenancy enforcement

# Default (OSS Grafana):
# All Editors can query all data sources
# Viewers can only view dashboards — cannot use Explore

# With data source permissions (Enterprise):
Loki-prod:
  - platform-team: Query + Admin
  - operations-team: Query only
  - tenant-ops: No direct access (dashboards only)

# Tenant isolation at the Loki level (works with OSS):
# Pass X-Scope-OrgID header per tenant
# Grafana forwards the user's org ID automatically

Provisioning Users and Teams via Configuration

# grafana-provisioning/access-control/teams.yaml
# Note: Team provisioning requires Grafana Enterprise
# For OSS, manage teams via the Grafana API or UI

# Create teams via Grafana API:
curl -X POST http://admin:admin@grafana:3000/api/teams \
  -H "Content-Type: application/json" \
  -d '{"name": "operations-team", "orgId": 1}'

# Add members to team:
curl -X POST http://admin:admin@grafana:3000/api/teams/1/members \
  -H "Content-Type: application/json" \
  -d '{"userId": 5}'

LDAP / SSO Integration

For enterprise BizFirstGO deployments, integrate Grafana with corporate identity providers to avoid managing separate user accounts:

# grafana.ini — LDAP integration
[auth.ldap]
enabled = true
config_file = /etc/grafana/ldap.toml
allow_sign_up = true

# ldap.toml — Map LDAP groups to Grafana roles
[[servers]]
host = "ldap.bizfirstai.internal"
port = 389
bind_dn = "cn=grafana-svc,ou=service-accounts,dc=bizfirstai,dc=com"
bind_password = "${LDAP_BIND_PASSWORD}"
search_base_dns = ["ou=users,dc=bizfirstai,dc=com"]
search_filter = "(sAMAccountName=%s)"

[[servers.group_mappings]]
group_dn = "cn=platform-engineering,ou=groups,dc=bizfirstai,dc=com"
org_role = "Admin"

[[servers.group_mappings]]
group_dn = "cn=operations,ou=groups,dc=bizfirstai,dc=com"
org_role = "Editor"

[[servers.group_mappings]]
group_dn = "cn=business-users,ou=groups,dc=bizfirstai,dc=com"
org_role = "Viewer"
# grafana.ini — OAuth 2.0 / OIDC (e.g., Azure AD, Okta)
[auth.generic_oauth]
enabled = true
name = BizFirstAI SSO
client_id = ${OAUTH_CLIENT_ID}
client_secret = ${OAUTH_CLIENT_SECRET}
scopes = openid email profile groups
auth_url = https://login.microsoftonline.com/${TENANT_ID}/oauth2/v2.0/authorize
token_url = https://login.microsoftonline.com/${TENANT_ID}/oauth2/v2.0/token
api_url = https://graph.microsoft.com/oidc/userinfo
role_attribute_path = contains(groups[*], 'platform-engineering') && 'Admin' || contains(groups[*], 'operations') && 'Editor' || 'Viewer'

BizFirstGO Recommended Access Control Setup

1

Create three Organizations: Production, Staging, Development

Fully isolate production dashboards and data sources from non-production environments.

2

Create teams: platform-team, operations-team, tenant-ops

Assign team-level folder permissions so each team sees only the dashboards relevant to them.

3

Integrate SSO (LDAP or OIDC)

Map corporate directory groups to Grafana roles. Avoid managing passwords in Grafana — SSO provides central revocation.

4

Restrict Explore for Viewers

In grafana.ini, set viewers_can_edit = false and ensure Explore is only accessible to Editor-and-above to prevent ad-hoc data access by business users.

5

Use Loki multi-tenancy for tenant isolation

Enforce tenant data boundaries at the Loki level (X-Scope-OrgID header), not just at the dashboard level — this prevents a misconfigured dashboard from leaking cross-tenant logs.

Dashboard Permissions Are Not Data Source Permissions

A user who can view a dashboard can only see the data rendered in that dashboard's panels. But if they have Editor role, they can also use Grafana Explore to query any data source directly — including querying across tenants if Loki multi-tenancy is not configured. Always configure Loki's auth_enabled: true for production deployments to enforce tenant isolation at the storage layer.