@ -113,6 +113,7 @@ func SetDashboardAcl(cmd *m.SetDashboardAclCommand) error {
} )
}
// RemoveDashboardAcl removes a specified permission from the dashboard acl
func RemoveDashboardAcl ( cmd * m . RemoveDashboardAclCommand ) error {
return inTransaction ( func ( sess * DBSession ) error {
var rawSQL = "DELETE FROM " + dialect . Quote ( "dashboard_acl" ) + " WHERE org_id =? and id=?"
@ -125,6 +126,11 @@ func RemoveDashboardAcl(cmd *m.RemoveDashboardAclCommand) error {
} )
}
// GetDashboardAclInfoList returns a list of permissions for a dashboard. They can be fetched from three
// different places.
// 1) Permissions for the dashboard
// 2) permissions for its parent folder
// 3) if no specific permissions have been set for the dashboard or its parent folder then get the default permissions
func GetDashboardAclInfoList ( query * m . GetDashboardAclInfoListQuery ) error {
var err error
@ -141,7 +147,11 @@ func GetDashboardAclInfoList(query *m.GetDashboardAclInfoListQuery) error {
da . updated ,
' ' as user_login ,
' ' as user_email ,
' ' as team
' ' as team ,
' ' as title ,
' ' as slug ,
' ' as uid , ` +
dialect . BooleanStr ( false ) + ` AS is_folder
FROM dashboard_acl as da
WHERE da . dashboard_id = - 1 `
query . Result = make ( [ ] * m . DashboardAclInfoDTO , 0 )
@ -155,6 +165,7 @@ func GetDashboardAclInfoList(query *m.GetDashboardAclInfoListQuery) error {
) ` , query . DashboardId , query . DashboardId )
rawSQL := `
-- get permissions for the dashboard and its parent folder
SELECT
da . id ,
da . org_id ,
@ -167,13 +178,18 @@ func GetDashboardAclInfoList(query *m.GetDashboardAclInfoListQuery) error {
da . updated ,
u . login AS user_login ,
u . email AS user_email ,
ug . name AS team
ug . name AS team ,
d . title ,
d . slug ,
d . uid ,
d . is_folder
FROM ` + dialect.Quote("dashboard_acl") + ` as da
LEFT OUTER JOIN ` + dialect.Quote("user") + ` AS u ON u . id = da . user_id
LEFT OUTER JOIN team ug on ug . id = da . team_id
LEFT OUTER JOIN dashboard d on da . dashboard_id = d . id
WHERE dashboard_id ` + dashboardFilter + ` AND da . org_id = ?
-- Also include default permission if has_acl = 0
-- Also include default permissions if folder or dashboard field "has_acl" is false
UNION
SELECT
@ -188,10 +204,14 @@ func GetDashboardAclInfoList(query *m.GetDashboardAclInfoListQuery) error {
da . updated ,
' ' as user_login ,
' ' as user_email ,
' ' as team
FROM dashboard_acl as da ,
' ' as team ,
folder . title ,
folder . slug ,
folder . uid ,
folder . is_folder
FROM dashboard_acl as da ,
dashboard as dash
LEFT JOIN dashboard folder on dash . folder_id = folder . id
LEFT OUTER JOIN dashboard folder on dash . folder_id = folder . id
WHERE
dash . id = ? AND (
dash . has_acl = ` + dialect.BooleanStr(false) + ` or