From 06ca18b1fb93bd8af55562404f5258a8368a499b Mon Sep 17 00:00:00 2001 From: Ralf Haferkamp Date: Wed, 2 Mar 2022 16:16:13 +0100 Subject: [PATCH] graph: Assign new user the default user role Similar to what the accounts service is doing, all new users get the User role assigned now. Otherwise creating the user's personal space upon login is not working. --- graph/pkg/service/v0/graph.go | 2 ++ graph/pkg/service/v0/service.go | 10 ++++++---- graph/pkg/service/v0/users.go | 15 +++++++++++++++ 3 files changed, 23 insertions(+), 4 deletions(-) diff --git a/graph/pkg/service/v0/graph.go b/graph/pkg/service/v0/graph.go index b634384e3..2dd618d09 100644 --- a/graph/pkg/service/v0/graph.go +++ b/graph/pkg/service/v0/graph.go @@ -11,6 +11,7 @@ import ( "github.com/owncloud/ocis/graph/pkg/config" "github.com/owncloud/ocis/graph/pkg/identity" "github.com/owncloud/ocis/ocis-pkg/log" + settingssvc "github.com/owncloud/ocis/protogen/gen/ocis/services/settings/v0" "google.golang.org/grpc" ) @@ -66,6 +67,7 @@ type Graph struct { identityBackend identity.Backend gatewayClient GatewayClient httpClient HTTPClient + roleService settingssvc.RoleService spacePropertiesCache *ttlcache.Cache } diff --git a/graph/pkg/service/v0/service.go b/graph/pkg/service/v0/service.go index a2bf0567b..c77959d96 100644 --- a/graph/pkg/service/v0/service.go +++ b/graph/pkg/service/v0/service.go @@ -116,17 +116,19 @@ func NewService(opts ...Option) Service { svc.httpClient = options.HTTPClient } - roleService := options.RoleService - if roleService == nil { - roleService = settingssvc.NewRoleService("com.owncloud.api.settings", grpc.DefaultClient) + if options.RoleService == nil { + svc.roleService = settingssvc.NewRoleService("com.owncloud.api.settings", grpc.DefaultClient) + } else { + svc.roleService = options.RoleService } + roleManager := options.RoleManager if roleManager == nil { m := roles.NewManager( roles.CacheSize(1024), roles.CacheTTL(time.Hour), roles.Logger(options.Logger), - roles.RoleService(roleService), + roles.RoleService(svc.roleService), ) roleManager = &m } diff --git a/graph/pkg/service/v0/users.go b/graph/pkg/service/v0/users.go index fcce5dc8f..ebdba6bb8 100644 --- a/graph/pkg/service/v0/users.go +++ b/graph/pkg/service/v0/users.go @@ -14,6 +14,8 @@ import ( libregraph "github.com/owncloud/libre-graph-api-go" "github.com/owncloud/ocis/graph/pkg/identity" "github.com/owncloud/ocis/graph/pkg/service/v0/errorcode" + settings "github.com/owncloud/ocis/protogen/gen/ocis/services/settings/v0" + settingssvc "github.com/owncloud/ocis/settings/pkg/service/v0" ) // GetMe implements the Service interface. @@ -86,6 +88,19 @@ func (g Graph) PostUser(w http.ResponseWriter, r *http.Request) { return } + // All users get the user role by default currently. + // to all new users for now, as create Account request does not have any role field + if g.roleService == nil { + errorcode.GeneralException.Render(w, r, http.StatusInternalServerError, "could not assign role to account: roleService not configured") + return + } + if _, err = g.roleService.AssignRoleToUser(r.Context(), &settings.AssignRoleToUserRequest{ + AccountUuid: *u.Id, + RoleId: settingssvc.BundleUUIDRoleUser, + }); err != nil { + errorcode.GeneralException.Render(w, r, http.StatusInternalServerError, fmt.Sprintf("could not assign role to account %s", err.Error())) + return + } render.Status(r, http.StatusOK) render.JSON(w, r, u) }