goharbor/harbor · error · *errors.Error
DENIED
DENIED
Error message
the operation isn't supported for an artifact accessory
What it means
Error "the operation isn't supported for an artifact accessory" thrown in goharbor/harbor.
Source
Thrown at src/server/v2.0/handler/artifact.go:193
if err != nil {
return a.SendError(ctx, err)
}
srcPro, _ := utils.ParseRepository(srcRepo)
if err = a.RequireProjectAccess(ctx, srcPro, rbac.ActionRead, rbac.ResourceArtifact); err != nil {
return a.SendError(ctx, err)
}
srcArt, err := a.artCtl.GetByReference(ctx, srcRepo, ref, nil)
if err != nil {
return a.SendError(ctx, err)
}
accs, err := a.accMgr.List(ctx, q.New(q.KeyWords{"ArtifactID": srcArt.ID, "Digest": srcArt.Digest}))
if err != nil {
return a.SendError(ctx, err)
}
if len(accs) >= 1 && accs[0].IsHard() {
return a.SendError(ctx, errors.New(nil).WithCode(errors.DENIED).WithMessage("the operation isn't supported for an artifact accessory"))
}
dstRepo := fmt.Sprintf("%s/%s", params.ProjectName, params.RepositoryName)
_, _, err = a.repoCtl.Ensure(ctx, dstRepo)
if err != nil {
return a.SendError(ctx, err)
}
_, err = a.artCtl.Copy(ctx, srcRepo, ref, dstRepo)
if err != nil {
return a.SendError(ctx, err)
}
location := strings.TrimSuffix(params.HTTPRequest.URL.Path, "/") + "/" + ref
return operation.NewCopyArtifactCreated().WithLocation(location)
}
// parse "repository:tag" or "repository@digest" into repository and reference parts
func parse(s string) (string, string, error) {View on GitHub (pinned to 7b2fd08cc5)
When it happens
Trigger: Thrown at src/server/v2.0/handler/artifact.go:193 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of goharbor/harbor@7b2fd08cc5 (2026-08-16).
Data as JSON: /api/errors/676fbbc022c1a324.
Report an issue: GitHub.