29 lines
656 B
Go
29 lines
656 B
Go
package metadata
|
|
|
|
import (
|
|
"forge.cadoles.com/arcad/edge/pkg/app"
|
|
"github.com/pkg/errors"
|
|
)
|
|
|
|
func WithMinimumRoleValidator(roles ...string) app.MetadataValidator {
|
|
return func(metadata map[string]any) (bool, error) {
|
|
rawMinimumRole, exists := metadata["minimumRole"]
|
|
if !exists {
|
|
return true, nil
|
|
}
|
|
|
|
minimumRole, ok := rawMinimumRole.(string)
|
|
if !ok {
|
|
return false, errors.Errorf("metadata['minimumRole']: unexpected value type '%T'", rawMinimumRole)
|
|
}
|
|
|
|
for _, r := range roles {
|
|
if minimumRole == r {
|
|
return true, nil
|
|
}
|
|
}
|
|
|
|
return false, errors.Errorf("metadata['minimumRole']: unexpected role '%s'", minimumRole)
|
|
}
|
|
}
|