diff --git a/pkg/storage/utils/eosfs/eosfs.go b/pkg/storage/utils/eosfs/eosfs.go index 98580bdc221..9aee199bb64 100644 --- a/pkg/storage/utils/eosfs/eosfs.go +++ b/pkg/storage/utils/eosfs/eosfs.go @@ -1311,7 +1311,7 @@ func (fs *eosfs) convertToFileReference(ctx context.Context, eosFileInfo *eoscli } // permissionSet returns the permission set for the current user -func (fs *eosfs) permissionSet(ctx context.Context, eosFileInfo *eosclient.FileInfo) *provider.ResourcePermissions { +func (fs *eosfs) permissionSet(ctx context.Context, eosFileInfo *eosclient.FileInfo, owner *userpb.UserId) *provider.ResourcePermissions { u, ok := user.ContextGetUserID(ctx) if !ok { return &provider.ResourcePermissions{ @@ -1319,6 +1319,30 @@ func (fs *eosfs) permissionSet(ctx context.Context, eosFileInfo *eosclient.FileI } } + if u.OpaqueId == owner.OpaqueId && u.Idp == owner.Idp { + return &provider.ResourcePermissions{ + // owner has all permissions + AddGrant: true, + CreateContainer: true, + Delete: true, + GetPath: true, + GetQuota: true, + InitiateFileDownload: true, + InitiateFileUpload: true, + ListContainer: true, + ListFileVersions: true, + ListGrants: true, + ListRecycle: true, + Move: true, + PurgeRecycle: true, + RemoveGrant: true, + RestoreFileVersion: true, + RestoreRecycleItem: true, + Stat: true, + UpdateGrant: true, + } + } + var perm string var rp *provider.ResourcePermissions for _, e := range eosFileInfo.SysACL.Entries { @@ -1395,7 +1419,7 @@ func (fs *eosfs) convert(ctx context.Context, eosFileInfo *eosclient.FileInfo) ( Etag: fmt.Sprintf("\"%s\"", strings.Trim(eosFileInfo.ETag, "\"")), MimeType: mime.Detect(eosFileInfo.IsDir, path), Size: size, - PermissionSet: fs.permissionSet(ctx, eosFileInfo), + PermissionSet: fs.permissionSet(ctx, eosFileInfo, owner), Mtime: &types.Timestamp{ Seconds: eosFileInfo.MTimeSec, Nanos: eosFileInfo.MTimeNanos,