Make SAML role mapping optional
Signed-off-by: Bryan Frimin <bryan@getprobo.com>
This commit is contained in:
@@ -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 {
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
Reference in New Issue
Block a user