@@ -847,31 +847,38 @@ func (hs *HTTPServer) GetDashboardVersions(c *contextmodel.ReqContext) response.
847
847
// 500: internalServerError
848
848
func (hs * HTTPServer ) GetDashboardVersion (c * contextmodel.ReqContext ) response.Response {
849
849
var dashID int64
850
-
851
850
var err error
852
- dashUID := web . Params ( c . Req )[ ":uid" ]
851
+ var dash * models. Dashboard
853
852
854
- var dash * dashboards. Dashboard
853
+ dashUID := web . Params ( c . Req )[ ":uid" ]
855
854
if dashUID == "" {
856
855
dashID , err = strconv .ParseInt (web .Params (c .Req )[":dashboardId" ], 10 , 64 )
857
856
if err != nil {
858
857
return response .Error (http .StatusBadRequest , "dashboardId is invalid" , err )
859
858
}
859
+ } else {
860
+ q := models.GetDashboardQuery {
861
+ OrgId : c .SignedInUser .OrgID ,
862
+ Uid : dashUID ,
863
+ }
864
+ if err := hs .DashboardService .GetDashboard (c .Req .Context (), & q ); err != nil {
865
+ return response .Error (http .StatusBadRequest , "failed to get dashboard by UID" , err )
866
+ }
867
+ dashID = q .Result .Id
868
+ dash = q .Result
860
869
}
861
870
862
- dash , rsp := hs .getDashboardHelper (c .Req .Context (), c .SignedInUser .GetOrgID (), dashID , dashUID )
863
- if rsp != nil {
864
- return rsp
865
- }
866
-
867
- guardian , err := guardian .NewByDashboard (c .Req .Context (), dash , c .SignedInUser .GetOrgID (), c .SignedInUser )
868
- if err != nil {
869
- return response .Err (err )
871
+ guardian := guardian .New (c .Req .Context (), dashID , c .OrgID , c .SignedInUser )
872
+ canSave := true
873
+ if canSave , err = guardian .CanSave (); err != nil || ! canSave {
874
+ return dashboardGuardianResponse (err )
870
875
}
871
-
872
- if canSave , err := guardian .CanSave (); err != nil || ! canSave {
876
+ if canView , err := guardian .CanView (); err != nil || ! canView {
873
877
return dashboardGuardianResponse (err )
874
878
}
879
+ canEdit , _ := guardian .CanEdit ()
880
+ canAdmin , _ := guardian .CanAdmin ()
881
+ canDelete , _ := guardian .CanDelete ()
875
882
876
883
version , _ := strconv .ParseInt (web .Params (c .Req )[":id" ], 10 , 32 )
877
884
query := dashver.GetDashboardVersionQuery {
@@ -891,17 +898,61 @@ func (hs *HTTPServer) GetDashboardVersion(c *contextmodel.ReqContext) response.R
891
898
creator = hs .getUserLogin (c .Req .Context (), res .CreatedBy )
892
899
}
893
900
894
- dashVersionMeta := & dashver.DashboardVersionMeta {
895
- ID : res .ID ,
896
- DashboardID : res .DashboardID ,
897
- DashboardUID : dash .UID ,
898
- Data : res .Data ,
899
- ParentVersion : res .ParentVersion ,
900
- RestoredFrom : res .RestoredFrom ,
901
- Version : res .Version ,
902
- Created : res .Created ,
903
- Message : res .Message ,
904
- CreatedBy : creator ,
901
+ annotationPermissions := & dtos.AnnotationPermission {}
902
+ if ! hs .AccessControl .IsDisabled () {
903
+ hs .getAnnotationPermissionsByScope (c , & annotationPermissions .Dashboard , accesscontrol .ScopeAnnotationsTypeDashboard )
904
+ hs .getAnnotationPermissionsByScope (c , & annotationPermissions .Organization , accesscontrol .ScopeAnnotationsTypeOrganization )
905
+ }
906
+
907
+ hasPublicDashboard := false
908
+ publicDashboardEnabled := false
909
+ // If public dashboards is enabled and we have a public dashboard, update meta values
910
+ if hs .Features .IsEnabled (featuremgmt .FlagPublicDashboards ) {
911
+ publicDashboard , err := hs .PublicDashboardsApi .PublicDashboardService .FindByDashboardUid (c .Req .Context (), c .OrgID , dash .Uid )
912
+ if err != nil && ! errors .Is (err , publicdashboardModels .ErrPublicDashboardNotFound ) {
913
+ return response .Error (500 , "Error while retrieving public dashboards" , err )
914
+ }
915
+ if publicDashboard != nil {
916
+ hasPublicDashboard = true
917
+ publicDashboardEnabled = publicDashboard .IsEnabled
918
+ }
919
+ }
920
+
921
+ meta := dtos.DashboardMeta {
922
+ Slug : dash .Slug ,
923
+ Type : models .DashTypeDB ,
924
+ CanStar : c .IsSignedIn ,
925
+ CanSave : canSave ,
926
+ CanEdit : canEdit ,
927
+ CanAdmin : canAdmin ,
928
+ CanDelete : canDelete ,
929
+ Created : dash .Created ,
930
+ Updated : dash .Updated ,
931
+ UpdatedBy : "Someone" ,
932
+ CreatedBy : creator ,
933
+ Version : dash .Version ,
934
+ HasACL : dash .HasACL ,
935
+ IsFolder : dash .IsFolder ,
936
+ FolderId : dash .FolderId ,
937
+ Url : dash .GetUrl (),
938
+ FolderTitle : "General" ,
939
+ AnnotationsPermissions : annotationPermissions ,
940
+ PublicDashboardEnabled : publicDashboardEnabled ,
941
+ HasPublicDashboard : hasPublicDashboard ,
942
+ }
943
+
944
+ // lookup folder title
945
+ if dash .FolderId > 0 {
946
+ query := models.GetDashboardQuery {Id : dash .FolderId , OrgId : c .OrgID }
947
+ if err := hs .DashboardService .GetDashboard (c .Req .Context (), & query ); err != nil {
948
+ if errors .Is (err , dashboards .ErrFolderNotFound ) {
949
+ return response .Error (404 , "Folder not found" , err )
950
+ }
951
+ return response .Error (500 , "Dashboard folder could not be read" , err )
952
+ }
953
+ meta .FolderUid = query .Result .Uid
954
+ meta .FolderTitle = query .Result .Title
955
+ meta .FolderUrl = query .Result .GetUrl ()
905
956
}
906
957
907
958
dto := dtos.DashboardFullWithMeta {
0 commit comments