factored out access control to an abstract base class