Overview
Grafana’s authorization system is implemented inpkg/services/accesscontrol/ and provides:
- Role-based access control (RBAC)
- Fine-grained permissions on resources
- Built-in roles (Viewer, Editor, Admin, Grafana Admin)
- Custom role creation
- Team-based permissions
- Resource-specific permissions
Core Concepts
Permissions
A permission consists of an action and a scope:pkg/services/accesscontrol/models.go:206-218
Actions define what operation can be performed:
dashboards:read- View dashboardsdashboards:write- Edit dashboardsdashboards:delete- Delete dashboardsusers:read- View usersdatasources:explore- Use Explore feature
dashboards:*- All dashboardsdashboards:uid:abc123- Specific dashboardfolders:uid:xyz789- Specific folderdatasources:id:1- Specific datasource
Roles
Roles are collections of permissions:pkg/services/accesscontrol/models.go:36-49
Role Types
-
Built-in Roles: Predefined organization roles
- Viewer
- Editor
- Admin
- Grafana Admin: Super admin with global permissions
-
Fixed Roles: System-defined roles (prefixed with
fixed:) - Custom Roles: User-defined roles for specific needs
- Managed Roles: Auto-generated roles for resource permissions
Evaluators
Evaluators combine permissions with logical operators:pkg/services/accesscontrol/evaluator.go
Built-in Roles
Organization Roles
Grafana has three built-in organization roles with different permission levels:Viewer
- View dashboards and panels
- View datasources (not query)
- View playlists
- View annotations
Editor
- All Viewer permissions
- Create and edit dashboards
- Create and edit folders
- Create and edit playlists
- Create annotations
Admin
- All Editor permissions
- Add and edit datasources
- Add and edit users to organization
- Manage organization settings
- Configure teams
- Manage plugins
- View and edit API keys
Grafana Admin
Grafana Admins have super admin privileges across all organizations:- All organization permissions in all orgs
- Create and manage organizations
- Create and manage users globally
- Access server admin pages
- Manage Grafana configuration
- View usage statistics
accesscontrol.RoleGrafanaAdmin (line 345)
Reference: pkg/services/accesscontrol/models.go:345
Access Control Service
The main access control interface provides permission evaluation and management.Core Interface
pkg/services/accesscontrol/accesscontrol.go:22-34
Permission Evaluation
Evaluating permissions in middleware:pkg/services/accesscontrol/accesscontrol.go:200-210
User Permissions
Getting User Permissions
pkg/services/accesscontrol/accesscontrol.go:36-66
Permission Caching
Permissions are cached for performance:conf/defaults.ini:1126-1127
Resource Permissions
Resource-specific permissions control access to individual resources.Permission Service
pkg/services/accesscontrol/accesscontrol.go:150-165
Resource Types with Permissions
- Dashboards:
DashboardPermissionsService - Folders:
FolderPermissionsService - Datasources:
DatasourcePermissionsService - Teams:
TeamPermissionsService - Service Accounts:
ServiceAccountPermissionsService - Alerting Receivers:
ReceiverPermissionsService
pkg/services/accesscontrol/accesscontrol.go:128-148
Middleware
Access control middleware enforces permissions on routes.Basic Middleware
pkg/services/accesscontrol/middleware.go
Route Protection
Example frompkg/middleware/auth.go:
pkg/middleware/auth.go:202-233
Actions and Scopes
Common Actions
User Actions
pkg/services/accesscontrol/models.go:347-368
Organization Actions
pkg/services/accesscontrol/models.go:370-383
LDAP Actions
pkg/services/accesscontrol/models.go:385-389
Team Actions
pkg/services/accesscontrol/models.go:413-419
Common Scopes
pkg/services/accesscontrol/models.go:341-422
Scope Patterns
Scopes support wildcards for flexible permission matching:dashboards:*- All dashboardsdashboards:uid:*- All dashboards by UIDfolders:*- All foldersdatasources:id:*- All datasources
Fixed Roles
Fixed roles are system-defined roles that map to built-in functionality.Declaring Fixed Roles
pkg/services/accesscontrol/models.go:27-33
External Service Roles
External services can have custom roles assigned to their service accounts.Creating External Service Roles
pkg/services/accesscontrol/models.go:299-338
Team Permissions
Teams allow grouping users and assigning permissions collectively.Team-based Access
Team Access Evaluator
Protects team configuration pages:pkg/services/accesscontrol/models.go:572-582
Configuration
RBAC Settings
conf/defaults.ini:1124-1134
Best Practices
1. Use Built-in Roles
Leverage built-in roles (Viewer, Editor, Admin) for common access patterns before creating custom roles.2. Principle of Least Privilege
Grant minimum necessary permissions:3. Use Teams for Group Management
Assign permissions to teams rather than individual users for easier management.4. Cache Invalidation
Clear permission cache after role changes:5. Scope Validation
Validate scope format:pkg/services/accesscontrol/accesscontrol.go:378-388
6. Check Global Permissions
For cross-organization access:pkg/services/accesscontrol/accesscontrol.go:173-198
Troubleshooting
Permission Denied Issues
-
Check User Roles: Verify user has correct organization role
-
Check Permissions: View user’s effective permissions
-
Clear Cache: Permissions may be cached
Debug Logging
Enable access control debugging:Permission Evaluation
Trace permission evaluation:Related Topics
- Authentication - User authentication methods
- Teams - Team management
- Service Accounts - Machine-to-machine authentication
- Security Best Practices - Comprehensive security guide