27 lines
629 B
Go
27 lines
629 B
Go
package platform
|
|
|
|
import "context"
|
|
|
|
type Principal struct {
|
|
Name string `json:"name"`
|
|
Role string `json:"role"`
|
|
}
|
|
|
|
type principalContextKey struct{}
|
|
|
|
func WithPrincipal(ctx context.Context, principal Principal) context.Context {
|
|
return context.WithValue(ctx, principalContextKey{}, principal)
|
|
}
|
|
|
|
func PrincipalFromContext(ctx context.Context) (Principal, bool) {
|
|
principal, ok := ctx.Value(principalContextKey{}).(Principal)
|
|
return principal, ok
|
|
}
|
|
|
|
func ActorFromContext(ctx context.Context) string {
|
|
if principal, ok := PrincipalFromContext(ctx); ok && principal.Name != "" {
|
|
return principal.Name
|
|
}
|
|
return "system"
|
|
}
|