mirror of https://github.com/grafana/grafana.git
				
				
				
			
		
			
				
	
	
		
			76 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			76 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Go
		
	
	
	
package sqlstore
 | 
						|
 | 
						|
import (
 | 
						|
	"bytes"
 | 
						|
	"strings"
 | 
						|
 | 
						|
	m "github.com/grafana/grafana/pkg/models"
 | 
						|
)
 | 
						|
 | 
						|
type SqlBuilder struct {
 | 
						|
	sql    bytes.Buffer
 | 
						|
	params []interface{}
 | 
						|
}
 | 
						|
 | 
						|
func (sb *SqlBuilder) Write(sql string, params ...interface{}) {
 | 
						|
	sb.sql.WriteString(sql)
 | 
						|
 | 
						|
	if len(params) > 0 {
 | 
						|
		sb.params = append(sb.params, params...)
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func (sb *SqlBuilder) GetSqlString() string {
 | 
						|
	return sb.sql.String()
 | 
						|
}
 | 
						|
 | 
						|
func (sb *SqlBuilder) AddParams(params ...interface{}) {
 | 
						|
	sb.params = append(sb.params, params...)
 | 
						|
}
 | 
						|
 | 
						|
func (sb *SqlBuilder) writeDashboardPermissionFilter(user *m.SignedInUser, permission m.PermissionType) {
 | 
						|
 | 
						|
	if user.OrgRole == m.ROLE_ADMIN {
 | 
						|
		return
 | 
						|
	}
 | 
						|
 | 
						|
	okRoles := []interface{}{user.OrgRole}
 | 
						|
 | 
						|
	if user.OrgRole == m.ROLE_EDITOR {
 | 
						|
		okRoles = append(okRoles, m.ROLE_VIEWER)
 | 
						|
	}
 | 
						|
 | 
						|
	falseStr := dialect.BooleanStr(false)
 | 
						|
 | 
						|
	sb.sql.WriteString(` AND
 | 
						|
	(
 | 
						|
		dashboard.id IN (
 | 
						|
			SELECT distinct d.id AS DashboardId
 | 
						|
			FROM dashboard AS d
 | 
						|
			 	LEFT JOIN dashboard folder on folder.id = d.folder_id
 | 
						|
			    LEFT JOIN dashboard_acl AS da ON
 | 
						|
	 			da.dashboard_id = d.id OR
 | 
						|
	 			da.dashboard_id = d.folder_id OR
 | 
						|
	 			(
 | 
						|
	 				-- include default permissions -->
 | 
						|
					da.org_id = -1 AND (
 | 
						|
					  (folder.id IS NOT NULL AND folder.has_acl = ` + falseStr + `) OR
 | 
						|
					  (folder.id IS NULL AND d.has_acl = ` + falseStr + `)
 | 
						|
					)
 | 
						|
	 			)
 | 
						|
				LEFT JOIN team_member as ugm on ugm.team_id = da.team_id
 | 
						|
			WHERE
 | 
						|
				d.org_id = ? AND
 | 
						|
				da.permission >= ? AND
 | 
						|
				(
 | 
						|
					da.user_id = ? OR
 | 
						|
					ugm.user_id = ? OR
 | 
						|
					da.role IN (?` + strings.Repeat(",?", len(okRoles)-1) + `)
 | 
						|
				)
 | 
						|
		)
 | 
						|
	)`)
 | 
						|
 | 
						|
	sb.params = append(sb.params, user.OrgId, permission, user.UserId, user.UserId)
 | 
						|
	sb.params = append(sb.params, okRoles...)
 | 
						|
}
 |