Skip to content

Commit 7a24804

Browse files
refactor permissions into a first-class citizen in Reva (#5428)
* refactor permissions into a first-class citizen in Reva, with conversions between the permissions * Fix following model type --------- Co-authored-by: Giuseppe Lo Presti <[email protected]>
1 parent b6ad626 commit 7a24804

File tree

40 files changed

+255
-284
lines changed

40 files changed

+255
-284
lines changed
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
Enhancement: refactor permissions
2+
3+
Permissions are now, at least partially, handled and exposed within a single package (which was important for cernboxcop), with conversions between the different types of permissions
4+
5+
https://github.com/cs3org/reva/pull/5428

cmd/reva/ocm-share-create.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ import (
3333
ocm "github.com/cs3org/go-cs3apis/cs3/sharing/ocm/v1beta1"
3434
provider "github.com/cs3org/go-cs3apis/cs3/storage/provider/v1beta1"
3535
types "github.com/cs3org/go-cs3apis/cs3/types/v1beta1"
36-
"github.com/cs3org/reva/v3/internal/http/services/owncloud/ocs/conversions"
36+
"github.com/cs3org/reva/v3/pkg/permissions"
3737
ocmshare "github.com/cs3org/reva/v3/pkg/ocm/share"
3838
"github.com/cs3org/reva/v3/pkg/utils"
3939
"github.com/jedib0t/go-pretty/table"
@@ -215,9 +215,9 @@ func getAccessMethods(webdav, webapp, datatx bool, rol string) ([]*ocm.AccessMet
215215
func getOCMSharePerm(p string) (*provider.ResourcePermissions, error) {
216216
switch p {
217217
case viewerPermission:
218-
return conversions.NewViewerRole().CS3ResourcePermissions(), nil
218+
return permissions.NewViewerRole().CS3ResourcePermissions(), nil
219219
case editorPermission:
220-
return conversions.NewEditorRole().CS3ResourcePermissions(), nil
220+
return permissions.NewEditorRole().CS3ResourcePermissions(), nil
221221
}
222222
return nil, errors.New("invalid rol: " + p)
223223
}

cmd/reva/share-create.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ import (
2828
rpc "github.com/cs3org/go-cs3apis/cs3/rpc/v1beta1"
2929
collaboration "github.com/cs3org/go-cs3apis/cs3/sharing/collaboration/v1beta1"
3030
provider "github.com/cs3org/go-cs3apis/cs3/storage/provider/v1beta1"
31-
"github.com/cs3org/reva/v3/internal/http/services/owncloud/ocs/conversions"
31+
"github.com/cs3org/reva/v3/pkg/permissions"
3232
"github.com/cs3org/reva/v3/pkg/utils"
3333
"github.com/jedib0t/go-pretty/table"
3434
"github.com/pkg/errors"
@@ -159,11 +159,11 @@ func getGrantType(t string) provider.GranteeType {
159159
func getSharePerm(p string) (*provider.ResourcePermissions, error) {
160160
switch p {
161161
case viewerPermission:
162-
return conversions.NewViewerRole().CS3ResourcePermissions(), nil
162+
return permissions.NewViewerRole().CS3ResourcePermissions(), nil
163163
case editorPermission:
164-
return conversions.NewEditorRole().CS3ResourcePermissions(), nil
164+
return permissions.NewEditorRole().CS3ResourcePermissions(), nil
165165
case collabPermission:
166-
return conversions.NewManagerRole().CS3ResourcePermissions(), nil
166+
return permissions.NewManagerRole().CS3ResourcePermissions(), nil
167167
case denyPermission:
168168
return &provider.ResourcePermissions{}, nil
169169
default:

internal/grpc/services/spacesregistry/spacesregistry.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ import (
3131
provider "github.com/cs3org/go-cs3apis/cs3/storage/provider/v1beta1"
3232
cachereg "github.com/cs3org/reva/v3/pkg/share/cache/registry"
3333

34-
"github.com/cs3org/reva/v3/internal/http/services/owncloud/ocs/conversions"
34+
"github.com/cs3org/reva/v3/pkg/permissions"
3535
"github.com/cs3org/reva/v3/pkg/appctx"
3636
"github.com/cs3org/reva/v3/pkg/errtypes"
3737
"github.com/cs3org/reva/v3/pkg/plugin"
@@ -410,14 +410,14 @@ func (s *service) userSpace(ctx context.Context, user *userpb.User) (*provider.S
410410
Name: user.Username,
411411
SpaceType: spaces.SpaceTypeHome.AsString(),
412412
RootInfo: &provider.ResourceInfo{
413-
PermissionSet: conversions.NewManagerRole().CS3ResourcePermissions(),
413+
PermissionSet: permissions.NewManagerRole().CS3ResourcePermissions(),
414414
Path: home,
415415
},
416416
Quota: &provider.Quota{
417417
QuotaMaxBytes: quota.TotalBytes,
418418
RemainingBytes: quota.TotalBytes - quota.UsedBytes,
419419
},
420-
PermissionSet: conversions.NewManagerRole().CS3ResourcePermissions(),
420+
PermissionSet: permissions.NewManagerRole().CS3ResourcePermissions(),
421421
}, nil
422422
}
423423

internal/http/services/owncloud/ocdav/propfind.go

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -40,10 +40,12 @@ import (
4040
provider "github.com/cs3org/go-cs3apis/cs3/storage/provider/v1beta1"
4141
types "github.com/cs3org/go-cs3apis/cs3/types/v1beta1"
4242
"github.com/cs3org/reva/v3/internal/grpc/services/storageprovider"
43-
"github.com/cs3org/reva/v3/internal/http/services/owncloud/ocs/conversions"
4443
"github.com/cs3org/reva/v3/pkg/appctx"
4544
"github.com/cs3org/reva/v3/pkg/spaces"
45+
"github.com/cs3org/reva/v3/pkg/permissions"
46+
4647
"github.com/pkg/errors"
48+
4749

4850
"github.com/cs3org/reva/v3/pkg/publicshare"
4951
"github.com/cs3org/reva/v3/pkg/share"
@@ -563,7 +565,7 @@ func (s *svc) mdToPropResponse(ctx context.Context, pf *propfindXML, md *provide
563565
}
564566
}
565567

566-
role := conversions.RoleFromResourcePermissions(md.PermissionSet)
568+
role := permissions.RoleFromResourcePermissions(md.PermissionSet)
567569

568570
isShared := !isCurrentUserOwner(ctx, md.Owner)
569571
var wdp string
@@ -1036,8 +1038,8 @@ func (s *svc) mdToPropResponse(ctx context.Context, pf *propfindXML, md *provide
10361038
perms := role.OCSPermissions()
10371039
// shared files cant have the create or delete permission set
10381040
if md.Type == provider.ResourceType_RESOURCE_TYPE_FILE {
1039-
perms &^= conversions.PermissionCreate
1040-
perms &^= conversions.PermissionDelete
1041+
perms &^= permissions.PermissionCreate
1042+
perms &^= permissions.PermissionDelete
10411043
}
10421044
propstatOK.Prop = append(propstatOK.Prop, s.newPropNS(pf.Prop[i].Space, pf.Prop[i].Local, strconv.FormatUint(uint64(perms), 10)))
10431045
}

internal/http/services/owncloud/ocdav/tus.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ import (
3131
link "github.com/cs3org/go-cs3apis/cs3/sharing/link/v1beta1"
3232
provider "github.com/cs3org/go-cs3apis/cs3/storage/provider/v1beta1"
3333
typespb "github.com/cs3org/go-cs3apis/cs3/types/v1beta1"
34-
"github.com/cs3org/reva/v3/internal/http/services/owncloud/ocs/conversions"
34+
"github.com/cs3org/reva/v3/pkg/permissions"
3535
"github.com/cs3org/reva/v3/pkg/appctx"
3636
"github.com/cs3org/reva/v3/pkg/utils"
3737
"github.com/cs3org/reva/v3/pkg/utils/resourceid"
@@ -297,7 +297,7 @@ func (s *svc) handleTusPost(ctx context.Context, w http.ResponseWriter, r *http.
297297
}
298298
}
299299
isShared := !isCurrentUserOwner(ctx, info.Owner)
300-
role := conversions.RoleFromResourcePermissions(info.PermissionSet)
300+
role := permissions.RoleFromResourcePermissions(info.PermissionSet)
301301
permissions := role.WebDAVPermissions(
302302
info.Type == provider.ResourceType_RESOURCE_TYPE_CONTAINER,
303303
isShared,

internal/http/services/owncloud/ocgraph/conversions.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ import (
1818
ocm "github.com/cs3org/go-cs3apis/cs3/sharing/ocm/v1beta1"
1919
provider "github.com/cs3org/go-cs3apis/cs3/storage/provider/v1beta1"
2020
types "github.com/cs3org/go-cs3apis/cs3/types/v1beta1"
21-
"github.com/cs3org/reva/v3/internal/http/services/owncloud/ocs/conversions"
21+
"github.com/cs3org/reva/v3/pkg/permissions"
2222
"github.com/cs3org/reva/v3/pkg/appctx"
2323
"github.com/cs3org/reva/v3/pkg/spaces"
2424
"github.com/cs3org/reva/v3/pkg/utils"
@@ -253,7 +253,7 @@ func LinkTypeToPermissions(lt libregraph.SharingLinkType, resourceType provider.
253253
case libregraph.INTERNAL:
254254
fallthrough
255255
default:
256-
return conversions.NewDeniedRole().CS3ResourcePermissions()
256+
return permissions.NewDeniedRole().CS3ResourcePermissions()
257257
}
258258
}
259259

internal/http/services/owncloud/ocgraph/drive_permissions.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ import (
1717
ocm "github.com/cs3org/go-cs3apis/cs3/sharing/ocm/v1beta1"
1818
provider "github.com/cs3org/go-cs3apis/cs3/storage/provider/v1beta1"
1919
typesv1beta1 "github.com/cs3org/go-cs3apis/cs3/types/v1beta1"
20-
"github.com/cs3org/reva/v3/internal/http/services/owncloud/ocs/conversions"
20+
"github.com/cs3org/reva/v3/pkg/permissions"
2121
"github.com/cs3org/reva/v3/pkg/appctx"
2222
"github.com/cs3org/reva/v3/pkg/errtypes"
2323
"github.com/cs3org/reva/v3/pkg/spaces"
@@ -808,7 +808,7 @@ func (s *svc) getLinkUpdates(ctx context.Context, link *linkv1beta1.PublicShare,
808808
if permission.Link != nil && permission.Link.Type != nil {
809809
isEditorLink = permission.Link.GetType() == libregraph.EDIT
810810
} else if link.Permissions != nil {
811-
isEditorLink = conversions.RoleFromResourcePermissions(link.Permissions.Permissions).Name == conversions.RoleEditor
811+
isEditorLink = permissions.RoleFromResourcePermissions(link.Permissions.Permissions).Name == permissions.RoleEditor
812812
}
813813

814814
// Check for update of expiration

internal/http/services/owncloud/ocgraph/linktype.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ import (
2626

2727
linkv1beta1 "github.com/cs3org/go-cs3apis/cs3/sharing/link/v1beta1"
2828
provider "github.com/cs3org/go-cs3apis/cs3/storage/provider/v1beta1"
29-
"github.com/cs3org/reva/v3/internal/http/services/owncloud/ocs/conversions"
29+
"github.com/cs3org/reva/v3/pkg/permissions"
3030
"github.com/cs3org/reva/v3/pkg/storage/utils/grants"
3131
libregraph "github.com/owncloud/libre-graph-api-go"
3232
)
@@ -114,31 +114,31 @@ func NewInternalLinkPermissionSet() *LinkType {
114114
// NewViewLinkPermissionSet creates cs3 permissions for the view link type
115115
func NewViewLinkPermissionSet() *LinkType {
116116
return &LinkType{
117-
Permissions: conversions.NewViewerRole().CS3ResourcePermissions(),
117+
Permissions: permissions.NewViewerRole().CS3ResourcePermissions(),
118118
linkType: libregraph.VIEW,
119119
}
120120
}
121121

122122
// NewFileEditLinkPermissionSet creates cs3 permissions for the file edit link type
123123
func NewFileEditLinkPermissionSet() *LinkType {
124124
return &LinkType{
125-
Permissions: conversions.NewFileEditorRole().CS3ResourcePermissions(),
125+
Permissions: permissions.NewFileEditorRole().CS3ResourcePermissions(),
126126
linkType: libregraph.EDIT,
127127
}
128128
}
129129

130130
// NewFolderEditLinkPermissionSet creates cs3 permissions for the folder edit link type
131131
func NewFolderEditLinkPermissionSet() *LinkType {
132132
return &LinkType{
133-
Permissions: conversions.NewEditorRole().CS3ResourcePermissions(),
133+
Permissions: permissions.NewEditorRole().CS3ResourcePermissions(),
134134
linkType: libregraph.EDIT,
135135
}
136136
}
137137

138138
// NewFolderDropLinkPermissionSet creates cs3 permissions for the folder createOnly link type
139139
func NewFolderDropLinkPermissionSet() *LinkType {
140140
return &LinkType{
141-
Permissions: conversions.NewUploaderRole().CS3ResourcePermissions(),
141+
Permissions: permissions.NewUploaderRole().CS3ResourcePermissions(),
142142
linkType: libregraph.CREATE_ONLY,
143143
}
144144
}

internal/http/services/owncloud/ocgraph/shares.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ import (
4343
link "github.com/cs3org/go-cs3apis/cs3/sharing/link/v1beta1"
4444
provider "github.com/cs3org/go-cs3apis/cs3/storage/provider/v1beta1"
4545
"github.com/cs3org/reva/v3/internal/http/services/opencloudmesh/ocmd"
46-
"github.com/cs3org/reva/v3/internal/http/services/owncloud/ocs/conversions"
46+
"github.com/cs3org/reva/v3/pkg/permissions"
4747
"github.com/cs3org/reva/v3/pkg/appctx"
4848
"github.com/cs3org/reva/v3/pkg/ocm/share"
4949
"github.com/cs3org/reva/v3/pkg/spaces"
@@ -272,7 +272,7 @@ func (s *svc) share(w http.ResponseWriter, r *http.Request) {
272272
}
273273

274274
// Check that the user has share permissions
275-
if !conversions.RoleFromResourcePermissions(statRes.Info.PermissionSet).OCSPermissions().Contain(conversions.PermissionShare) {
275+
if !permissions.RoleFromResourcePermissions(statRes.Info.PermissionSet).OCSPermissions().Contain(permissions.PermissionShare) {
276276
handleCustomError(ctx, errors.New("user does not have share permissions"), http.StatusUnauthorized, w)
277277
return
278278
}
@@ -411,7 +411,7 @@ func (s *svc) createLink(w http.ResponseWriter, r *http.Request) {
411411
}
412412

413413
// Check that the user has share permissions
414-
if !conversions.RoleFromResourcePermissions(statRes.Info.PermissionSet).OCSPermissions().Contain(conversions.PermissionShare) {
414+
if !permissions.RoleFromResourcePermissions(statRes.Info.PermissionSet).OCSPermissions().Contain(permissions.PermissionShare) {
415415
handleCustomError(ctx, errors.New("user does not have the necessary permissions"), http.StatusUnauthorized, w)
416416
return
417417
}

0 commit comments

Comments
 (0)