| 
									
										
										
										
											2022-07-08 19:24:09 +08:00
										 |  |  | package plugins | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import ( | 
					
						
							| 
									
										
										
										
											2022-09-09 15:44:50 +08:00
										 |  |  | 	"github.com/grafana/grafana/pkg/models" | 
					
						
							| 
									
										
										
										
											2022-07-08 19:24:09 +08:00
										 |  |  | 	ac "github.com/grafana/grafana/pkg/services/accesscontrol" | 
					
						
							| 
									
										
										
										
											2022-08-10 17:56:48 +08:00
										 |  |  | 	"github.com/grafana/grafana/pkg/services/org" | 
					
						
							| 
									
										
										
										
											2022-09-09 15:44:50 +08:00
										 |  |  | 	"github.com/grafana/grafana/pkg/setting" | 
					
						
							| 
									
										
										
										
											2022-07-08 19:24:09 +08:00
										 |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const ( | 
					
						
							| 
									
										
										
										
											2022-09-09 15:44:50 +08:00
										 |  |  | 	// Plugins actions
 | 
					
						
							|  |  |  | 	ActionInstall = "plugins:install" | 
					
						
							|  |  |  | 	ActionWrite   = "plugins:write" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// App Plugins actions
 | 
					
						
							| 
									
										
										
										
											2022-07-08 19:24:09 +08:00
										 |  |  | 	ActionAppAccess = "plugins.app:access" | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var ( | 
					
						
							|  |  |  | 	ScopeProvider = ac.NewScopeProvider("plugins") | 
					
						
							| 
									
										
										
										
											2022-09-09 15:44:50 +08:00
										 |  |  | 	// Protects access to the Configuration > Plugins page
 | 
					
						
							|  |  |  | 	AdminAccessEvaluator = ac.EvalAny(ac.EvalPermission(ActionWrite), ac.EvalPermission(ActionInstall)) | 
					
						
							| 
									
										
										
										
											2022-07-08 19:24:09 +08:00
										 |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-09-09 15:44:50 +08:00
										 |  |  | func ReqCanAdminPlugins(cfg *setting.Cfg) func(rc *models.ReqContext) bool { | 
					
						
							|  |  |  | 	// Legacy handler that protects access to the Configuration > Plugins page
 | 
					
						
							|  |  |  | 	return func(rc *models.ReqContext) bool { | 
					
						
							|  |  |  | 		return rc.OrgRole == org.RoleAdmin || cfg.PluginAdminEnabled && rc.IsGrafanaAdmin | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func DeclareRBACRoles(service ac.Service, cfg *setting.Cfg) error { | 
					
						
							| 
									
										
										
										
											2022-07-08 19:24:09 +08:00
										 |  |  | 	AppPluginsReader := ac.RoleRegistration{ | 
					
						
							|  |  |  | 		Role: ac.RoleDTO{ | 
					
						
							|  |  |  | 			Name:        ac.FixedRolePrefix + "plugins.app:reader", | 
					
						
							|  |  |  | 			DisplayName: "Application Plugins Access", | 
					
						
							|  |  |  | 			Description: "Access application plugins (still enforcing the organization role)", | 
					
						
							|  |  |  | 			Group:       "Plugins", | 
					
						
							|  |  |  | 			Permissions: []ac.Permission{ | 
					
						
							|  |  |  | 				{Action: ActionAppAccess, Scope: ScopeProvider.GetResourceAllScope()}, | 
					
						
							|  |  |  | 			}, | 
					
						
							|  |  |  | 		}, | 
					
						
							| 
									
										
										
										
											2022-08-10 17:56:48 +08:00
										 |  |  | 		Grants: []string{string(org.RoleViewer)}, | 
					
						
							| 
									
										
										
										
											2022-07-08 19:24:09 +08:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2022-09-09 15:44:50 +08:00
										 |  |  | 	PluginsWriter := ac.RoleRegistration{ | 
					
						
							|  |  |  | 		Role: ac.RoleDTO{ | 
					
						
							|  |  |  | 			Name:        ac.FixedRolePrefix + "plugins:writer", | 
					
						
							|  |  |  | 			DisplayName: "Plugin Writer", | 
					
						
							|  |  |  | 			Description: "Enable and disable plugins and edit plugins' settings", | 
					
						
							|  |  |  | 			Group:       "Plugins", | 
					
						
							|  |  |  | 			Permissions: []ac.Permission{ | 
					
						
							|  |  |  | 				{Action: ActionWrite, Scope: ScopeProvider.GetResourceAllScope()}, | 
					
						
							|  |  |  | 			}, | 
					
						
							|  |  |  | 		}, | 
					
						
							|  |  |  | 		Grants: []string{string(org.RoleAdmin)}, | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	PluginsMaintainer := ac.RoleRegistration{ | 
					
						
							|  |  |  | 		Role: ac.RoleDTO{ | 
					
						
							|  |  |  | 			Name:        ac.FixedRolePrefix + "plugins:maintainer", | 
					
						
							|  |  |  | 			DisplayName: "Plugin Maintainer", | 
					
						
							|  |  |  | 			Description: "Install, uninstall plugins", | 
					
						
							|  |  |  | 			Group:       "Plugins", | 
					
						
							|  |  |  | 			Permissions: []ac.Permission{ | 
					
						
							|  |  |  | 				{Action: ActionInstall}, | 
					
						
							|  |  |  | 			}, | 
					
						
							|  |  |  | 		}, | 
					
						
							|  |  |  | 		Grants: []string{ac.RoleGrafanaAdmin}, | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if !cfg.PluginAdminEnabled || cfg.PluginAdminExternalManageEnabled { | 
					
						
							|  |  |  | 		PluginsMaintainer.Grants = []string{} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return service.DeclareFixedRoles(AppPluginsReader, PluginsWriter, PluginsMaintainer) | 
					
						
							| 
									
										
										
										
											2022-07-08 19:24:09 +08:00
										 |  |  | } |