73 lines
1.4 KiB
Go
73 lines
1.4 KiB
Go
package service
|
|
|
|
import (
|
|
"context"
|
|
|
|
"go.infratographer.com/x/gidx"
|
|
)
|
|
|
|
func (s *service) IsUser(id gidx.PrefixedID) bool {
|
|
if idType, ok := s.idPrefixMap[id.Prefix()]; ok {
|
|
return idType == TypeUser
|
|
}
|
|
|
|
return false
|
|
}
|
|
|
|
func (s *service) IsAssignableResource(id gidx.PrefixedID) bool {
|
|
if idType, ok := s.idPrefixMap[id.Prefix()]; ok {
|
|
switch idType {
|
|
case TypeOrganization, TypeProject:
|
|
return true
|
|
default:
|
|
return false
|
|
}
|
|
}
|
|
|
|
return false
|
|
}
|
|
|
|
func (s *service) AssignUser(ctx context.Context, userID gidx.PrefixedID, resourceIDs ...gidx.PrefixedID) error {
|
|
var memberships []ResourceMemberships
|
|
|
|
for _, resourceID := range resourceIDs {
|
|
var (
|
|
role string
|
|
err error
|
|
)
|
|
|
|
if idType, ok := s.idPrefixMap[resourceID.Prefix()]; ok {
|
|
switch idType {
|
|
case TypeOrganization:
|
|
role, err = s.metal.GetUserOrganizationRole(ctx, userID, resourceID)
|
|
case TypeProject:
|
|
role, err = s.metal.GetUserProjectRole(ctx, userID, resourceID)
|
|
}
|
|
}
|
|
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
if role == "" {
|
|
continue
|
|
}
|
|
|
|
memberships = append(memberships, ResourceMemberships{
|
|
Resource: prefixedID{resourceID},
|
|
Role: role,
|
|
Member: prefixedID{userID},
|
|
})
|
|
}
|
|
|
|
s.processMemberships(ctx, memberships)
|
|
|
|
s.logger.Infow("assignment sync complete", "memberships", len(memberships))
|
|
|
|
return nil
|
|
}
|
|
|
|
func (s *service) RemoveUser(ctx context.Context, userID gidx.PrefixedID, resourceIDs ...gidx.PrefixedID) error {
|
|
return nil
|
|
}
|