diff --git a/services/graph/pkg/config/defaults/defaultconfig.go b/services/graph/pkg/config/defaults/defaultconfig.go index 21827d9850..f27bcce186 100644 --- a/services/graph/pkg/config/defaults/defaultconfig.go +++ b/services/graph/pkg/config/defaults/defaultconfig.go @@ -15,6 +15,7 @@ var ( // but can be enabled by the user. _disabledByDefaultUnifiedRoleRoleIDs = []string{ unifiedrole.UnifiedRoleSecureViewerID, + unifiedrole.UnifiedRoleSpaceViewerWithVersionsID, unifiedrole.UnifiedRoleSpaceEditorWithoutVersionsID, unifiedrole.UnifiedRoleViewerListGrantsID, unifiedrole.UnifiedRoleEditorListGrantsID, diff --git a/services/graph/pkg/unifiedrole/conversion.go b/services/graph/pkg/unifiedrole/conversion.go index 92dbcf5030..a554ff2b9a 100644 --- a/services/graph/pkg/unifiedrole/conversion.go +++ b/services/graph/pkg/unifiedrole/conversion.go @@ -5,6 +5,7 @@ import ( provider "github.com/cs3org/go-cs3apis/cs3/storage/provider/v1beta1" libregraph "github.com/opencloud-eu/libre-graph-api-go" + "github.com/opencloud-eu/reva/v2/pkg/conversions" ) @@ -210,6 +211,8 @@ func cs3RoleToDisplayName(role *conversions.Role) string { return _viewerListGrantsUnifiedRoleDisplayName case conversions.RoleSpaceViewer: return _spaceViewerUnifiedRoleDisplayName + case conversions.RoleSpaceViewerWithVersions: + return _spaceViewerWithVersionsUnifiedRoleDisplayName case conversions.RoleEditor: return _editorUnifiedRoleDisplayName case conversions.RoleEditorWithVersions: diff --git a/services/graph/pkg/unifiedrole/conversion_test.go b/services/graph/pkg/unifiedrole/conversion_test.go index 6ba6888078..44a6b95544 100644 --- a/services/graph/pkg/unifiedrole/conversion_test.go +++ b/services/graph/pkg/unifiedrole/conversion_test.go @@ -71,7 +71,7 @@ func TestCS3ResourcePermissionsToRole(t *testing.T) { cs3Conversions.RoleFileEditorWithVersions: {cs3Conversions.NewFileEditorWithVersionsRole().CS3ResourcePermissions(), unifiedrole.RoleFileEditorWithVersions, unifiedrole.UnifiedRoleConditionFile}, cs3Conversions.RoleManager: {cs3Conversions.NewManagerRole().CS3ResourcePermissions(), unifiedrole.RoleManager, unifiedrole.UnifiedRoleConditionDrive}, cs3Conversions.RoleSpaceViewer: {cs3Conversions.NewSpaceViewerRole().CS3ResourcePermissions(), unifiedrole.RoleSpaceViewer, unifiedrole.UnifiedRoleConditionDrive}, - cs3Conversions.RoleSpaceEditor: {cs3Conversions.NewSpaceEditorRole().CS3ResourcePermissions(), unifiedrole.RoleSpaceEditor, unifiedrole.UnifiedRoleConditionDrive}, + cs3Conversions.RoleSpaceEditor: {cs3Conversions.NewSpaceEditorRole().CS3ResourcePermissions(), unifiedrole.RoleSpaceEditorWithVersions, unifiedrole.UnifiedRoleConditionDrive}, cs3Conversions.RoleSecureViewer + "1": {cs3Conversions.NewSecureViewerRole().CS3ResourcePermissions(), unifiedrole.RoleSecureViewer, unifiedrole.UnifiedRoleConditionFile}, cs3Conversions.RoleSecureViewer + "2": {cs3Conversions.NewSecureViewerRole().CS3ResourcePermissions(), unifiedrole.RoleSecureViewer, unifiedrole.UnifiedRoleConditionFolder}, cs3Conversions.RoleDenied: {cs3Conversions.NewDeniedRole().CS3ResourcePermissions(), unifiedrole.RoleDenied, unifiedrole.UnifiedRoleConditionFolder}, diff --git a/services/graph/pkg/unifiedrole/export_test.go b/services/graph/pkg/unifiedrole/export_test.go index 0ef80b3be4..c47ab0ea31 100644 --- a/services/graph/pkg/unifiedrole/export_test.go +++ b/services/graph/pkg/unifiedrole/export_test.go @@ -1,22 +1,23 @@ package unifiedrole var ( - RoleViewer = roleViewer - RoleViewerWithVersions = roleViewerWithVersions - RoleViewerListGrants = roleViewerListGrants - RoleSpaceViewer = roleSpaceViewer - RoleEditor = roleEditor - RoleEditorWithVersions = roleEditorWithVersions - RoleEditorListGrants = roleEditorListGrants - RoleSpaceEditor = roleSpaceEditor - RoleSpaceEditorWithoutVersions = roleSpaceEditorWithoutVersions - RoleFileEditor = roleFileEditor - RoleFileEditorWithVersions = roleFileEditorWithVersions - RoleFileEditorListGrants = roleFileEditorListGrants - RoleEditorLite = roleEditorLite - RoleManager = roleManager - RoleSecureViewer = roleSecureViewer - RoleDenied = roleDenied + RoleViewer = roleViewer + RoleViewerWithVersions = roleViewerWithVersions + RoleViewerListGrants = roleViewerListGrants + RoleSpaceViewer = roleSpaceViewer + RoleSpaceViewerWithVersions = roleSpaceViewerWithVersions + RoleEditor = roleEditor + RoleEditorWithVersions = roleEditorWithVersions + RoleEditorListGrants = roleEditorListGrants + RoleSpaceEditor = roleSpaceEditor + RoleSpaceEditorWithVersions = roleSpaceEditorWithVersions + RoleFileEditor = roleFileEditor + RoleFileEditorWithVersions = roleFileEditorWithVersions + RoleFileEditorListGrants = roleFileEditorListGrants + RoleEditorLite = roleEditorLite + RoleManager = roleManager + RoleSecureViewer = roleSecureViewer + RoleDenied = roleDenied BuildInRoles = buildInRoles diff --git a/services/graph/pkg/unifiedrole/roles.go b/services/graph/pkg/unifiedrole/roles.go index 2c75a86152..1420eeab94 100644 --- a/services/graph/pkg/unifiedrole/roles.go +++ b/services/graph/pkg/unifiedrole/roles.go @@ -6,9 +6,10 @@ import ( "strings" libregraph "github.com/opencloud-eu/libre-graph-api-go" - "github.com/opencloud-eu/reva/v2/pkg/conversions" "google.golang.org/protobuf/proto" + "github.com/opencloud-eu/reva/v2/pkg/conversions" + "github.com/opencloud-eu/opencloud/pkg/l10n" graphl10n "github.com/opencloud-eu/opencloud/services/graph/pkg/l10n" ) @@ -22,6 +23,8 @@ const ( UnifiedRoleViewerListGrantsID = "d5041006-ebb3-4b4a-b6a4-7c180ecfb17d" // UnifiedRoleSpaceViewerID Unified role space viewer id. UnifiedRoleSpaceViewerID = "a8d5fe5e-96e3-418d-825b-534dbdf22b99" + // UnifiedRoleSpaceViewerWithVersionsID + UnifiedRoleSpaceViewerWithVersionsID = "3de465fc-6e17-4839-8b8a-a77cc497878b" // UnifiedRoleEditorID Unified role editor id. UnifiedRoleEditorID = "fb6c3e19-e378-47e5-b277-9732f9de6e21" // UnifiedRoleEditorWithVersionsID @@ -121,6 +124,12 @@ var ( // UnifiedRole SpaseViewer, Role DisplayName (resolves directly) _spaceViewerUnifiedRoleDisplayName = l10n.Template("Can view") + // UnifiedRole SpaceViewer, Role Description (resolves directly) + _spaceViewerWithVersionsUnifiedRoleDescription = l10n.Template("View and download including the history.") + + // UnifiedRole SpaseViewer, Role DisplayName (resolves directly) + _spaceViewerWithVersionsUnifiedRoleDisplayName = l10n.Template("Can view") + // UnifiedRole Editor, Role Description (resolves directly) _editorUnifiedRoleDescription = l10n.Template("View, download, upload, edit, add and delete.") @@ -214,11 +223,12 @@ var ( roleViewerWithVersions, roleViewerListGrants, roleSpaceViewer, + roleSpaceViewerWithVersions, roleEditor, roleEditorListGrants, roleEditorWithVersions, + roleSpaceEditorWithVersions, roleSpaceEditor, - roleSpaceEditorWithoutVersions, roleFileEditor, roleFileEditorWithVersions, roleFileEditorListGrants, @@ -345,6 +355,23 @@ var ( } }() + // roleSpaceViewer creates a spaceviewer role + roleSpaceViewerWithVersions = func() *libregraph.UnifiedRoleDefinition { + r := conversions.NewSpaceViewerWithVersionsRole() + return &libregraph.UnifiedRoleDefinition{ + Id: proto.String(UnifiedRoleSpaceViewerWithVersionsID), + Description: proto.String(_spaceViewerWithVersionsUnifiedRoleDescription), + DisplayName: proto.String(cs3RoleToDisplayName(r)), + RolePermissions: []libregraph.UnifiedRolePermission{ + { + AllowedResourceActions: CS3ResourcePermissionsToLibregraphActions(r.CS3ResourcePermissions()), + Condition: proto.String(UnifiedRoleConditionDrive), + }, + }, + LibreGraphWeight: proto.Int32(40), + } + }() + // roleEditorLite creates an editor-lite role roleEditorLite = func() *libregraph.UnifiedRoleDefinition { r := conversions.NewEditorLiteRole() @@ -420,8 +447,8 @@ var ( } }() - // roleSpaceEditorWithoutVersions creates an editor without versions role - roleSpaceEditorWithoutVersions = func() *libregraph.UnifiedRoleDefinition { + // roleSpaceEditor creates an editor without versions role + roleSpaceEditor = func() *libregraph.UnifiedRoleDefinition { r := conversions.NewSpaceEditorWithoutVersionsRole() return &libregraph.UnifiedRoleDefinition{ Id: proto.String(UnifiedRoleSpaceEditorWithoutVersionsID), @@ -437,8 +464,8 @@ var ( } }() - // roleSpaceEditor creates an editor role - roleSpaceEditor = func() *libregraph.UnifiedRoleDefinition { + // roleSpaceEditorWithVersions creates an editor role + roleSpaceEditorWithVersions = func() *libregraph.UnifiedRoleDefinition { r := conversions.NewSpaceEditorRole() return &libregraph.UnifiedRoleDefinition{ Id: proto.String(UnifiedRoleSpaceEditorID), diff --git a/services/graph/pkg/unifiedrole/roles_test.go b/services/graph/pkg/unifiedrole/roles_test.go index 2bb5f80da3..986163e2cd 100644 --- a/services/graph/pkg/unifiedrole/roles_test.go +++ b/services/graph/pkg/unifiedrole/roles_test.go @@ -38,6 +38,10 @@ func TestGetDefinition(t *testing.T) { ids: []string{unifiedrole.UnifiedRoleFileEditorWithVersionsID}, unifiedRoleDefinition: unifiedrole.RoleFileEditorWithVersions, }, + "pass space-viewer-with-versions": { + ids: []string{unifiedrole.UnifiedRoleSpaceViewerWithVersionsID}, + unifiedRoleDefinition: unifiedrole.RoleSpaceViewerWithVersions, + }, "fail unknown": { ids: []string{"unknown"}, expectError: unifiedrole.ErrUnknownRole, @@ -203,8 +207,9 @@ func TestGetRolesByPermissions(t *testing.T) { constraints: unifiedrole.UnifiedRoleConditionDrive, unifiedRoleDefinition: []*libregraph.UnifiedRoleDefinition{ unifiedrole.RoleSpaceViewer, - unifiedrole.RoleSpaceEditorWithoutVersions, + unifiedrole.RoleSpaceViewerWithVersions, unifiedrole.RoleSpaceEditor, + unifiedrole.RoleSpaceEditorWithVersions, unifiedrole.RoleManager, }, }, diff --git a/services/web/pkg/theme/theme.go b/services/web/pkg/theme/theme.go index 099845fc0a..a6f05c62b8 100644 --- a/services/web/pkg/theme/theme.go +++ b/services/web/pkg/theme/theme.go @@ -33,6 +33,10 @@ var themeDefaults = KV{ "label": "UnifiedRoleSpaceViewer", "iconName": "eye", }, + unifiedrole.UnifiedRoleSpaceViewerWithVersionsID: KV{ + "label": "UnifiedRoleSpaceViewerWithVersions", + "iconName": "eye", + }, unifiedrole.UnifiedRoleFileEditorID: KV{ "label": "UnifiedRoleFileEditor", "iconName": "pencil",