does this need to implement `role?` (probably checking against `'guest'`?)