| 
									
										
										
										
											2018-02-08 00:54:21 +08:00
										 |  |  | package sqlstore | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import ( | 
					
						
							|  |  |  | 	"bytes" | 
					
						
							|  |  |  | 	"strings" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	m "github.com/grafana/grafana/pkg/models" | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | type SqlBuilder struct { | 
					
						
							|  |  |  | 	sql    bytes.Buffer | 
					
						
							|  |  |  | 	params []interface{} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-09 00:11:01 +08:00
										 |  |  | func (sb *SqlBuilder) writeDashboardPermissionFilter(user *m.SignedInUser, permission m.PermissionType) { | 
					
						
							| 
									
										
										
										
											2018-02-08 00:54:21 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	if user.OrgRole == m.ROLE_ADMIN { | 
					
						
							|  |  |  | 		return | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	okRoles := []interface{}{user.OrgRole} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if user.OrgRole == m.ROLE_EDITOR { | 
					
						
							|  |  |  | 		okRoles = append(okRoles, m.ROLE_VIEWER) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	sb.sql.WriteString(` AND | 
					
						
							|  |  |  | 	( | 
					
						
							|  |  |  | 		dashboard.has_acl = ` + dialect.BooleanStr(false) + ` OR | 
					
						
							|  |  |  | 		dashboard.id in ( | 
					
						
							|  |  |  | 			SELECT distinct d.id AS DashboardId | 
					
						
							|  |  |  | 			FROM dashboard AS d | 
					
						
							|  |  |  | 				LEFT JOIN dashboard_acl as da on d.folder_id = da.dashboard_id or d.id = da.dashboard_id | 
					
						
							|  |  |  | 				LEFT JOIN team_member as ugm on ugm.team_id =  da.team_id | 
					
						
							|  |  |  | 			WHERE | 
					
						
							|  |  |  | 				d.has_acl = ` + dialect.BooleanStr(true) + ` AND | 
					
						
							|  |  |  | 				d.org_id = ? AND | 
					
						
							|  |  |  | 				da.permission >= ? AND | 
					
						
							|  |  |  | 				(da.user_id = ? or ugm.user_id = ? or da.role IN (?` + strings.Repeat(",?", len(okRoles)-1) + `)) | 
					
						
							|  |  |  | 		) | 
					
						
							|  |  |  | 	)`) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-09 00:11:01 +08:00
										 |  |  | 	sb.params = append(sb.params, user.OrgId, permission, user.UserId, user.UserId) | 
					
						
							| 
									
										
										
										
											2018-02-08 00:54:21 +08:00
										 |  |  | 	sb.params = append(sb.params, okRoles...) | 
					
						
							|  |  |  | } |