| 
									
										
										
										
											2017-05-08 21:35:34 +08:00
										 |  |  | package api | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import ( | 
					
						
							| 
									
										
										
										
											2017-06-22 07:02:03 +08:00
										 |  |  | 	"time" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	"github.com/grafana/grafana/pkg/api/dtos" | 
					
						
							| 
									
										
										
										
											2017-05-08 21:35:34 +08:00
										 |  |  | 	"github.com/grafana/grafana/pkg/bus" | 
					
						
							|  |  |  | 	"github.com/grafana/grafana/pkg/middleware" | 
					
						
							|  |  |  | 	m "github.com/grafana/grafana/pkg/models" | 
					
						
							|  |  |  | 	"github.com/grafana/grafana/pkg/services/guardian" | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-20 06:11:30 +08:00
										 |  |  | func GetDashboardAclList(c *middleware.Context) Response { | 
					
						
							|  |  |  | 	dashId := c.ParamsInt64(":dashboardId") | 
					
						
							| 
									
										
										
										
											2017-05-08 21:35:34 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-20 01:47:44 +08:00
										 |  |  | 	guardian := guardian.NewDashboardGuardian(dashId, c.OrgId, c.SignedInUser) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-23 05:01:04 +08:00
										 |  |  | 	if canAdmin, err := guardian.CanAdmin(); err != nil || !canAdmin { | 
					
						
							| 
									
										
										
										
											2017-06-20 01:47:44 +08:00
										 |  |  | 		return dashboardGuardianResponse(err) | 
					
						
							| 
									
										
										
										
											2017-05-08 21:35:34 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-23 05:10:43 +08:00
										 |  |  | 	acl, err := guardian.GetAcl() | 
					
						
							|  |  |  | 	if err != nil { | 
					
						
							|  |  |  | 		return ApiError(500, "Failed to get dashboard acl", err) | 
					
						
							| 
									
										
										
										
											2017-05-08 21:35:34 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-23 05:10:43 +08:00
										 |  |  | 	return Json(200, acl) | 
					
						
							| 
									
										
										
										
											2017-05-08 21:35:34 +08:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2017-05-22 16:36:47 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-22 07:02:03 +08:00
										 |  |  | func UpdateDashboardAcl(c *middleware.Context, apiCmd dtos.UpdateDashboardAclCommand) Response { | 
					
						
							| 
									
										
										
										
											2017-06-20 06:34:25 +08:00
										 |  |  | 	dashId := c.ParamsInt64(":dashboardId") | 
					
						
							| 
									
										
										
										
											2017-06-20 01:47:44 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	guardian := guardian.NewDashboardGuardian(dashId, c.OrgId, c.SignedInUser) | 
					
						
							| 
									
										
										
										
											2017-06-23 05:01:04 +08:00
										 |  |  | 	if canAdmin, err := guardian.CanAdmin(); err != nil || !canAdmin { | 
					
						
							| 
									
										
										
										
											2017-06-20 01:47:44 +08:00
										 |  |  | 		return dashboardGuardianResponse(err) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-22 07:02:03 +08:00
										 |  |  | 	cmd := m.UpdateDashboardAclCommand{} | 
					
						
							| 
									
										
										
										
											2017-06-20 01:47:44 +08:00
										 |  |  | 	cmd.DashboardId = dashId | 
					
						
							| 
									
										
										
										
											2017-06-10 03:56:13 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-22 07:02:03 +08:00
										 |  |  | 	for _, item := range apiCmd.Items { | 
					
						
							|  |  |  | 		cmd.Items = append(cmd.Items, &m.DashboardAcl{ | 
					
						
							|  |  |  | 			OrgId:       c.OrgId, | 
					
						
							|  |  |  | 			DashboardId: dashId, | 
					
						
							|  |  |  | 			UserId:      item.UserId, | 
					
						
							|  |  |  | 			UserGroupId: item.UserGroupId, | 
					
						
							|  |  |  | 			Role:        item.Role, | 
					
						
							|  |  |  | 			Permission:  item.Permission, | 
					
						
							|  |  |  | 			Created:     time.Now(), | 
					
						
							|  |  |  | 			Updated:     time.Now(), | 
					
						
							|  |  |  | 		}) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-10 03:56:13 +08:00
										 |  |  | 	if err := bus.Dispatch(&cmd); err != nil { | 
					
						
							| 
									
										
										
										
											2017-06-20 06:55:34 +08:00
										 |  |  | 		if err == m.ErrDashboardAclInfoMissing || err == m.ErrDashboardPermissionDashboardEmpty { | 
					
						
							| 
									
										
										
										
											2017-06-15 05:45:30 +08:00
										 |  |  | 			return ApiError(409, err.Error(), err) | 
					
						
							| 
									
										
										
										
											2017-06-10 03:56:13 +08:00
										 |  |  | 		} | 
					
						
							|  |  |  | 		return ApiError(500, "Failed to create permission", err) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-22 07:02:03 +08:00
										 |  |  | 	return ApiSuccess("Dashboard acl updated") | 
					
						
							| 
									
										
										
										
											2017-06-10 03:56:13 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-20 06:11:30 +08:00
										 |  |  | func DeleteDashboardAcl(c *middleware.Context) Response { | 
					
						
							|  |  |  | 	dashId := c.ParamsInt64(":dashboardId") | 
					
						
							|  |  |  | 	aclId := c.ParamsInt64(":aclId") | 
					
						
							| 
									
										
										
										
											2017-06-20 01:47:44 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	guardian := guardian.NewDashboardGuardian(dashId, c.OrgId, c.SignedInUser) | 
					
						
							| 
									
										
										
										
											2017-06-23 05:01:04 +08:00
										 |  |  | 	if canAdmin, err := guardian.CanAdmin(); err != nil || !canAdmin { | 
					
						
							| 
									
										
										
										
											2017-06-20 01:47:44 +08:00
										 |  |  | 		return dashboardGuardianResponse(err) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-20 06:11:30 +08:00
										 |  |  | 	cmd := m.RemoveDashboardAclCommand{OrgId: c.OrgId, AclId: aclId} | 
					
						
							| 
									
										
										
										
											2017-06-20 01:47:44 +08:00
										 |  |  | 	if err := bus.Dispatch(&cmd); err != nil { | 
					
						
							|  |  |  | 		return ApiError(500, "Failed to delete permission for user", err) | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2017-05-22 16:36:47 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	return Json(200, "") | 
					
						
							|  |  |  | } |