docs: function allowRoute (args) {
      // validate args
      this.requireValidArgsRoute(args)
      // start new audit
      this.newAudit(args, 'route')
      // get access rules
      var rules = this.getRules('route')
      // if no rules exist for model then default to allow
      if (!rules) {
          return this.audit.setAllow(true)
      }
      // get path
      var path = args.path
      // if path ends in / append index
      if (path.charAt(path.length - 1) === '/') {
          path = path + 'index';
      }
      // split path into segments
      var segments = path.split('/')
      // discard first empty segment of path
      segments.shift()
      // get roles from session or use defaults
      var roles = this.getRoles(args.session)
      // default to allow
      var allow = true
      // check global rules
      if (rules.allow) {
          allow = this.isRoleAllowed(allow, roles, rules.allow, false, 'global')
      }
      // get number of segments
      var segmentsLen = segments.length
      // check each path segment to see if it has any rules
      for (var i=0; i<segmentsLen; i++) {
          // get next segment
          var segment = segments[i]
          // get rules for path segment if any
          rules = rules.path && rules.path[segment]
          // if there are rules check them
          if (rules) {
              // set to true if segment has any rules
              var hasRules = false
              // if there are rules that apply to all methods check them
              if (rules.allow) {
                  allow = this.isRoleAllowed(allow, roles, rules.allow, false, 'path', {
                      segment: segment,
                  })
                  hasRules = true
              }
              // if there is a method specific rule for route that matches
              // the method being requested then check it - this overrides
              // any non method specific rule
              if (rules.method && rules.method[args.method]) {
                  allow = this.isRoleAllowed(allow, roles, rules.method[args.method].allow, false, 'method', {
                      segment: segment,
                  })
                  hasRules = true
              }
              // if segment has no rules then add audit record to indicate this
              if (!hasRules) {
                  this.audit.setRule({
                      ruleType: 'none',
                      segment: segment,
                  })
              }
          }
          // if there are no rules for this segment then there can be not rules
          // for any child segment so return current allow status
          else {
              return this.audit.setAllow(allow)
          }
      }
  
      return this.audit.setAllow(allow)
  }