Make SAML role mapping optional

Signed-off-by: Bryan Frimin <bryan@getprobo.com>
This commit is contained in:
Bryan Frimin
2025-11-12 09:28:33 +01:00
parent edce70141d
commit d3467c0a05
3 changed files with 14 additions and 8 deletions

View File

@@ -77,12 +77,13 @@ func ExtractEmailDomain(email string) (string, error) {
return domain, nil return domain, nil
} }
func MapSAMLRoleToSystemRole(samlRole string) coredata.Role { func MapSAMLRoleToSystemRole(samlRole string) *coredata.Role {
if samlRole != "" && isValidRole(samlRole) { if samlRole != "" && isValidRole(samlRole) {
return coredata.Role(samlRole) role := coredata.Role(samlRole)
return &role
} }
return coredata.RoleMember return nil
} }
func isValidRole(role string) bool { func isValidRole(role string) bool {

View File

@@ -407,7 +407,7 @@ func (s *SAMLService) InitiateSAMLLogin(
type SAMLUserInfo struct { type SAMLUserInfo struct {
Email string Email string
FullName string FullName string
Role coredata.Role Role *coredata.Role
SAMLSubject string SAMLSubject string
OrganizationID gid.GID OrganizationID gid.GID
SAMLConfigID gid.GID SAMLConfigID gid.GID

View File

@@ -827,7 +827,7 @@ func (s *TenantAuthzService) EnsureSAMLMembership(
ctx context.Context, ctx context.Context,
userID gid.GID, userID gid.GID,
organizationID gid.GID, organizationID gid.GID,
role coredata.Role, role *coredata.Role,
) error { ) error {
now := time.Now() now := time.Now()
@@ -842,12 +842,17 @@ func (s *TenantAuthzService) EnsureSAMLMembership(
return fmt.Errorf("cannot load membership: %w", err) return fmt.Errorf("cannot load membership: %w", err)
} }
membershipRole := coredata.RoleMember
if role != nil {
membershipRole = *role
}
membershipID := gid.New(s.scope.GetTenantID(), coredata.MembershipEntityType) membershipID := gid.New(s.scope.GetTenantID(), coredata.MembershipEntityType)
membership = coredata.Membership{ membership = coredata.Membership{
ID: membershipID, ID: membershipID,
UserID: userID, UserID: userID,
OrganizationID: organizationID, OrganizationID: organizationID,
Role: role, Role: membershipRole,
CreatedAt: now, CreatedAt: now,
UpdatedAt: now, UpdatedAt: now,
} }
@@ -859,8 +864,8 @@ func (s *TenantAuthzService) EnsureSAMLMembership(
return nil return nil
} }
if membership.Role != role { if role != nil && membership.Role != *role {
membership.Role = role membership.Role = *role
membership.UpdatedAt = now membership.UpdatedAt = now
if err := membership.Update(ctx, tx, s.scope); err != nil { if err := membership.Update(ctx, tx, s.scope); err != nil {