context.go

 1package access
 2
 3import "context"
 4
 5var (
 6	contextKey            = &struct{ string }{"access"}
 7	ContextKeyAccessLevel = &struct{ string }{"access-level"}
 8)
 9
10// FromContext returns the access from the context.
11func FromContext(ctx context.Context) Access {
12	if access, ok := ctx.Value(contextKey).(Access); ok {
13		return access
14	}
15	return nil
16}
17
18// WithContext returns a new context with the access attached.
19func WithContext(ctx context.Context, access Access) context.Context {
20	return context.WithValue(ctx, contextKey, access)
21}
22
23// AccessLevelFromContext returns the access level from the context.
24func AccessLevelFromContext(ctx context.Context) AccessLevel {
25	if al, ok := ctx.Value(ContextKeyAccessLevel).(AccessLevel); ok {
26		return al
27	}
28	return NoAccess
29}
30
31// WithAccessLevelContext returns a new context with the access level attached.
32func WithAccessLevelContext(ctx context.Context, al AccessLevel) context.Context {
33	return context.WithValue(ctx, ContextKeyAccessLevel, al)
34}