chore: swap access check to folder client (#111490)
This commit is contained in:
@@ -675,17 +675,21 @@ func (b *DashboardsAPIBuilder) GetAuthorizer() authorizer.Authorizer {
|
||||
}
|
||||
|
||||
func (b *DashboardsAPIBuilder) verifyFolderAccessPermissions(ctx context.Context, user identity.Requester, folderIds ...string) error {
|
||||
scopes := []string{}
|
||||
for _, folderId := range folderIds {
|
||||
scopes = append(scopes, dashboards.ScopeFoldersProvider.GetResourceScopeUID(folderId))
|
||||
}
|
||||
ok, err := b.accessControl.Evaluate(ctx, user, accesscontrol.EvalPermission(dashboards.ActionFoldersWrite, scopes...))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
resp, err := b.folderClient.Get(ctx, folderId, user.GetOrgID(), metav1.GetOptions{}, "access")
|
||||
if err != nil {
|
||||
return dashboards.ErrFolderAccessDenied
|
||||
}
|
||||
var accessInfo folders.FolderAccessInfo
|
||||
err = runtime.DefaultUnstructuredConverter.FromUnstructured(resp.Object, &accessInfo)
|
||||
if err != nil {
|
||||
b.log.Error("Failed to convert folder access response", "error", err)
|
||||
return dashboards.ErrFolderAccessDenied
|
||||
}
|
||||
|
||||
if !ok {
|
||||
return dashboards.ErrFolderAccessDenied
|
||||
if !accessInfo.CanEdit {
|
||||
return dashboards.ErrFolderAccessDenied
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
|
||||
Reference in New Issue
Block a user