Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions pkg/connector/collaborator.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,10 @@ import (
"github.com/grpc-ecosystem/go-grpc-middleware/logging/zap/ctxzap"
)

const (
noAccessRoleName = "No access"
)

var _ connectorbuilder.ResourceSyncerV2 = (*collaboratorBuilder)(nil)

type collaboratorBuilder struct {
Expand Down Expand Up @@ -201,6 +205,8 @@ func (o *collaboratorBuilder) collaboratorRoleGrants(ctx context.Context, sessio
Resource: roleId,
},
}
case role.RoleName == noAccessRoleName:
continue
case !o.disableCustomRolesSync:
customRole := getRoleByName(ctx, session, role.RoleName)
if customRole == nil {
Expand Down
27 changes: 22 additions & 5 deletions pkg/connector/role.go
Original file line number Diff line number Diff line change
Expand Up @@ -123,9 +123,26 @@ func (o *roleBuilder) Grants(ctx context.Context, resource *v2.Resource, attr rs
l := ctxzap.Extract(ctx)
rv := make([]*v2.Grant, 0)

roleTrait, err := rs.GetRoleTrait(resource)
if err != nil {
return nil, nil, fmt.Errorf("failed to get role trait: %w", err)
}
profile := roleTrait.GetProfile()
if profile == nil {
return nil, nil, fmt.Errorf("role profile not found on resource %s", resource.Id.Resource)
}
roleId, ok := profile.AsMap()["id"].(string)
if !ok {
return nil, nil, fmt.Errorf("role id not found on resource %s", resource.Id.Resource)
}
roleName, ok := profile.AsMap()["name"].(string)
if !ok {
return nil, nil, fmt.Errorf("role name not found on resource %s", resource.Id.Resource)
}

// Base Roles - privilege grants implementation
if workato.IsBaseRole(resource.DisplayName) {
role, err := workato.GetBaseRole(resource.DisplayName)
if workato.IsBaseRole(roleName) {
role, err := workato.GetBaseRole(roleName)
if err != nil {
return nil, nil, err
}
Expand Down Expand Up @@ -160,10 +177,10 @@ func (o *roleBuilder) Grants(ctx context.Context, resource *v2.Resource, attr rs

if !o.disableCustomRolesSync {
// privilege grants implementation
role := getRoleById(ctx, attr.Session, resource.Id.Resource)
role := getRoleById(ctx, attr.Session, roleId)
if role == nil {
l.Warn("role not found", zap.String("role_name", resource.DisplayName), zap.String("role_id", resource.Id.Resource))
return rv, nil, uhttp.WrapErrors(codes.NotFound, fmt.Sprintf("role %s (%s) not found", resource.DisplayName, resource.Id.Resource))
l.Warn("role not found", zap.String("role_name", resource.DisplayName), zap.String("role_id", roleId))
return rv, nil, uhttp.WrapErrors(codes.NotFound, fmt.Sprintf("role %s (%s) not found", resource.DisplayName, roleId))
}

privileges, err := workato.FindRelatedPrivilegesErr(role.Privileges)
Expand Down
Loading