whole_func_string: function(parentAcl, childAcl) {
      var self = this
      return o({
        _type: parentAcl.constructor,
        hasPermission: function(user, permission, env) {
          var selfAndBelowFn = self._selfAndBelowFn(parentAcl)
          return (!selfAndBelowFn || selfAndBelowFn(user, permission, env)) &&
            (!childAcl || childAcl.hasPermission(user, permission, env))
        }
      })
    }
func_code_string: function(parentAcl, childAcl) {
      var self = this
      return o({
        _type: parentAcl.constructor,
        hasPermission: function(user, permission, env) {
          var selfAndBelowFn = self._selfAndBelowFn(parentAcl)
          return (!selfAndBelowFn || selfAndBelowFn(user, permission, env)) &&
            (!childAcl || childAcl.hasPermission(user, permission, env))
        }
      })
    }
func_documentation_string: ***************************************************************************
  @method _aclAndBelow
  @description Combines an ACL from a parent endpoint with one from its child.
  If the parent ACL has no selfAndBelow configured, only the child
  ACL is used.  If selfAndBelow is true, the user must have the
  same permission on the parent to access the child.  If
  selfAndBelow is the name of a permission (e.g. 'get'), the user
  must have that permission on the parent in order to access the
  child. If selfAndBelow is a function, it will be invoked with
  the user, permission name, and environment as arguments just
  like the regular permission functions in order to determine
  access.  Assuming the user has access to the parent as defined
  above, the child ACL will then be evaluated.  If there is no
  child ACL, the user is granted permission by default.
  @param {carbond.security.Acl} parentAcl -- The parent endpoint's ACL
  @param {carbond.security.Acl} childAcl -- The child endpoint's ACL
  @returns {carbond.security.Acl} -- The aggregate ACL for this endpoint