Skip to content

Commit b049fb3

Browse files
authored
fix namespace entitlement grant logic (#32)
* use entitlement ID for namespace roles * do not attempt to grant an additional account role when a user has an immutable role
1 parent 5f4220e commit b049fb3

File tree

2 files changed

+14
-1
lines changed

2 files changed

+14
-1
lines changed

pkg/connector/account_roles.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,12 @@ func (o *accountRoleBuilder) Grant(ctx context.Context, principal *v2.Resource,
147147
return nil, nil, fmt.Errorf("temporalcloud-connnector: couldn't retrieve user: %w", err)
148148
}
149149

150+
currRole := userResp.GetUser().GetSpec().GetAccess().GetAccountAccess().GetRole()
151+
if slices.Contains(immutableAccountRoles, currRole) {
152+
zap.L().Info("temporalcloud-connector: user has immutable role, skipping grant", zap.String("user_id", userID))
153+
return nil, nil, nil
154+
}
155+
150156
newRole := accountAccessRoleFromID(accountRoleID, accountID)
151157
if newRole == identityv1.AccountAccess_ROLE_UNSPECIFIED {
152158
return nil, nil, fmt.Errorf("temporalcloud-connector: invalid account role %s", strings.TrimPrefix(accountRoleID, accountID+"-"))

pkg/connector/namespaces.go

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package connector
33
import (
44
"context"
55
"fmt"
6+
"strings"
67
"time"
78

89
v2 "github.com/conductorone/baton-sdk/pb/c1/connector/v2"
@@ -128,14 +129,20 @@ func (o *namespaceBuilder) Grants(ctx context.Context, resource *v2.Resource, pT
128129
}
129130

130131
func (o *namespaceBuilder) Grant(ctx context.Context, principal *v2.Resource, e *v2.Entitlement) ([]*v2.Grant, annotations.Annotations, error) {
131-
nsRole := e.GetSlug()
132132
entitlementID := e.GetId()
133133
userID := principal.GetId().GetResource()
134134
userType := principal.GetId().GetResourceType()
135135
namespace := e.GetResource()
136136
namespaceID := namespace.GetId().GetResource()
137137
namespaceType := namespace.GetId().GetResourceType()
138138

139+
enIDParts := strings.Split(entitlementID, ":")
140+
if len(enIDParts) != 3 {
141+
return nil, nil, fmt.Errorf("temporalcloud-connector: invalid entitlement ID %s", entitlementID)
142+
}
143+
144+
nsRole := enIDParts[2]
145+
139146
namespaceRole := namespaceAccessPermissionFromString(nsRole)
140147
if namespaceRole == identityv1.NamespaceAccess_PERMISSION_UNSPECIFIED {
141148
return nil, nil, fmt.Errorf("temporalcloud-connector: invalid namespace permission %s", nsRole)

0 commit comments

Comments
 (0)