class Controller implements Wrapper {

	@Override public Handler wrap(final Handler handler) {
		return request -> {
			if ( roles.isEmpty() ) {

				return handler.handle(request);

			} else {

				final Collection<Object> roles=new HashSet<>(this.roles);

				roles.retainAll(request.roles());

				return roles.isEmpty() ? request.reply(Response.Unauthorized) // !!! 404 under strict security
						: handler.handle(request.roles(roles));

			}
		};
	}

	public  Controller(final Object... roles);
	public  Controller(final Collection<Object> roles);

}