//go:build go1.18 // +build go1.18 package main type AccessRole uint16 func (r AccessRole) Is(v AccessRole) bool { return r&v != 0 } func (r AccessRole) Allow(v AccessRole) bool { return r&v >= v } const ( InvalidAccessRole AccessRole = 1 << iota Read Write Delete Owner = Read | Write | Delete Member = Read | Write ) type User struct { ID string `json:"id"` Email string `json:"email"` Role AccessRole `json:"role"` } func (u User) GetID() string { return u.ID }