security:
  enable_authenticator_manager: true
  password_hashers:
    App\Entity\User: auto
    Symfony\Component\Security\Core\User\InMemoryUser: auto
  providers:
    user_provider:
      entity:
        class: App\Entity\User
    customer_provider:
      entity:
        class: App\Entity\Customer
    tech_app_provider:
      memory:
        users:
          technician: { roles: [ 'ROLE_TECHNICIAN' ] }
    dealer_provider:
      memory:
        users:
          dealer: { roles: [ 'ROLE_ADMIN' ] }
    iservice_provider:
      memory:
        users:
          iservice: { roles: [ 'ROLE_ADMIN' ] }
    guest_user_provider:
      entity:
        class: App\Entity\GuestUser
    chain_provider:
      chain:
        providers: [ 'user_provider', 'customer_provider', 'tech_app_provider', 'dealer_provider', 'iservice_provider', 'guest_user_provider' ]
    doc_provider:
      memory:
        users:
          iservice: { password: '$2y$13$TtcH26K3dV4fnBWGGi0.Ru2dmdSVpLXpMmQxKoUDwoPqUrU55rrWC', roles: [ 'ROLE_DOC' ] }
  role_hierarchy:
    ROLE_ADMIN: [ ROLE_MANAGER, ROLE_SERVICE_MANAGER, ROLE_SERVICE_ADVISOR, ROLE_TECHNICIAN, ROLE_PARTS_ADVISOR, ROLE_SALES_MANAGER, ROLE_SALES_AGENT, ROLE_USER, ROLE_BDC_MANAGER, ROLE_BDC ]
    ROLE_MANAGER: ROLE_USER
    ROLE_SERVICE_MANAGER: [ ROLE_MANAGER, ROLE_SERVICE_ADVISOR, ROLE_USER ]
    ROLE_SERVICE_ADVISOR: ROLE_USER
    ROLE_TECHNICIAN: ROLE_USER
    ROLE_PARTS_ADVISOR: ROLE_USER
    ROLE_SALES_MANAGER: [ ROLE_MANAGER, ROLE_SALES_AGENT, ROLE_USER ]
    ROLE_SALES_AGENT: ROLE_USER
    ROLE_BDC_MANAGER: [ ROLE_MANAGER, ROLE_USER, ROLE_BDC ]
    ROLE_BDC: ROLE_USER
    ROLE_GUEST_USER: ROLE_GUEST_USER
    ROLE_GLOBAL_PAY: ROLE_GLOBAL_PAY
    ROLE_FINANCE_MANAGER: [ ROLE_MANAGER, ROLE_USER ]
  # https://symfony.com/doc/current/security.html#where-do-users-come-from-user-providers
  firewalls:
    doc:
      pattern: ^/api/doc
      stateless: true
      provider: doc_provider
      http_basic: ~
    dev:
      pattern: ^/(_(profiler|wdt|doc)|css|images|js)/
      security: false
    api:
      pattern: ^/api
      stateless: true
#      anonymous: true
      provider: 'chain_provider'
      jwt:
        authenticator: app.custom_authenticator
#      custom_authenticators:
#        - App\Security\Authenticator
#      guard:
#        authenticators:
#          - App\Security\Authenticator
  # Easy way to control access for large sections of your site
  # Note: Only the *first* access control that matches will be used
  # See: https://docs.google.com/spreadsheets/d/1hs8ozy2VzUva-oOWw1uLc2EMRr4Y9BDOT1ESy0AY8Ao/edit#gid=0
  access_control:
    - { path: ^/api/authentication/authenticate, role: PUBLIC_ACCESS }
    - { path: ^/api/authentication/guest-user, role: PUBLIC_ACCESS }
    - { path: ^/api/authentication/refresh, role: PUBLIC_ACCESS }
    - { path: ^/api/authentication/cognito/mfa, role: PUBLIC_ACCESS }
    - { path: ^/api/authentication/cognito/access-token, role: PUBLIC_ACCESS }
    - { path: ^/api/ping, role: PUBLIC_ACCESS }
    - { path: ^/api/health-check, methods: [GET], role: PUBLIC_ACCESS }
    - { path: ^/api/appointment-availability, methods: [GET], roles: [ROLE_USER, ROLE_GUEST_USER]  }
    - { path: ^/api/appointment-code-group/sort-order, methods: [POST], roles: [ROLE_ADMIN, ROLE_SERVICE_MANAGER]  }
    - { path: ^/api/appointment-code-group, methods: [GET], roles: [ROLE_USER, ROLE_GUEST_USER]  }
    - { path: ^/api/appointment-code-group, methods: [POST, PUT, DELETE], roles: [ROLE_ADMIN, ROLE_SERVICE_MANAGER]  }
    - { path: ^/api/appointment-code-operation-code, methods: [GET], roles: [ROLE_USER]  }
    - { path: ^/api/appointment-code-operation-code, methods: [POST, DELETE], roles: [ROLE_ADMIN, ROLE_SERVICE_MANAGER]  }
    - { path: ^/api/appointment-code/sort-order, methods: [POST], roles: [ROLE_ADMIN, ROLE_SERVICE_MANAGER]  }
    - { path: ^/api/appointment-code, methods: [GET], roles: [ROLE_CUSTOMER, ROLE_USER, ROLE_GUEST_USER]  }
    - { path: ^/api/appointment-code, methods: [POST, PUT, DELETE], roles: [ROLE_ADMIN, ROLE_SERVICE_MANAGER]  }
    - { path: ^/api/appointment, methods: [POST], roles: [IS_AUTHENTICATED_FULLY] }
    - { path: ^/api/appointment, methods: [GET, PATCH, DELETE], roles: [ROLE_USER] }
    - { path: ^/api/bdc-express, methods: [GET], roles: [ ROLE_ADMIN, ROLE_SERVICE_MANAGER, ROLE_BDC_MANAGER, ROLE_BDC, ROLE_SERVICE_ADVISOR ] }
    - { path: ^/api/bdc-task-note, methods: [POST, DELETE], roles: [ROLE_ADMIN, ROLE_SERVICE_MANAGER, ROLE_SERVICE_ADVISOR, ROLE_BDC_MANAGER, ROLE_BDC] }
    - { path: ^/api/bdc-task-generator, methods: [GET, POST, PUT, DELETE], roles: [ ROLE_ADMIN, ROLE_SERVICE_MANAGER, ROLE_BDC_MANAGER, ROLE_BDC] }
    - { path: ^/api/bdc-quick-sms, roles: [ ROLE_ADMIN, ROLE_SERVICE_MANAGER, ROLE_BDC_MANAGER, ROLE_BDC ] }
    - { path: ^/api/bdc-quick-sms-group, roles: [ ROLE_ADMIN, ROLE_SERVICE_MANAGER, ROLE_BDC_MANAGER, ROLE_BDC ] }
    - { path: ^/api/bdc-phase/re-assign, methods: [POST], roles: [ROLE_ADMIN, ROLE_SERVICE_MANAGER] }
    - { path: ^/api/bdc-phase, methods: [ GET ], roles: [ ROLE_USER ] }
    - { path: ^/api/bdc-phase, methods: [ POST, PUT, DELETE ], roles: [ ROLE_ADMIN, ROLE_SERVICE_MANAGER ] }
    - { path: ^/api/bdc-task/phase-transition, methods: [ POST ], roles: [ ROLE_ADMIN, ROLE_SERVICE_MANAGER, ROLE_BDC_MANAGER, ROLE_BDC, ROLE_SERVICE_ADVISOR ] }
    - { path: ^/api/bdc-task, roles: [ ROLE_ADMIN, ROLE_SERVICE_MANAGER, ROLE_BDC_MANAGER, ROLE_BDC, ROLE_SERVICE_ADVISOR, ROLE_SALES_MANAGER ] }
    - { path: ^/api/bdc-label, methods: [GET, POST, PUT, DELETE], roles: [ ROLE_ADMIN, ROLE_SERVICE_MANAGER, ROLE_BDC_MANAGER, ROLE_SERVICE_ADVISOR, ROLE_BDC ] }
    - { path: ^/api/bdc-task/interaction-history, roles: [ ROLE_ADMIN, ROLE_SERVICE_MANAGER, ROLE_BDC_MANAGER, ROLE_BDC, ROLE_SERVICE_ADVISOR ] }
    - { path: ^/api/bdc-express-appointments, methods: [ GET ], roles: [ ROLE_ADMIN, ROLE_SERVICE_MANAGER, ROLE_BDC_MANAGER, ROLE_BDC, ROLE_SERVICE_ADVISOR ] }
    - { path: ^/api/support, role: PUBLIC_ACCESS }
    - { path: ^/api/metrics, roles: [PUBLIC_ACCESS] }
    - { path: ^/api/dashboard/advisor, methods: [GET], roles: [ROLE_ADMIN, ROLE_SERVICE_MANAGER, ROLE_SERVICE_ADVISOR] }
    - { path: ^/api/dashboard/technician, methods: [GET], roles: [ROLE_ADMIN, ROLE_SERVICE_MANAGER, ROLE_TECHNICIAN] }
    - { path: ^/api/esign-document, methods: [GET], roles: [ROLE_USER, ROLE_CUSTOMER] }
    - { path: ^/api/esign-document, methods: [POST], roles: [ROLE_USER] }
    - { path: ^/api/doc, role: PUBLIC_ACCESS, host: localhost$  }
    - { path: ^/api/doc, role: PUBLIC_ACCESS, host: 127.0.0.1$  }
    - { path: ^/api/doc, role: ROLE_DOC  }
    - { path: ^/api/demo/by-repair-order-id, methods: [GET], roles: [ROLE_ADMIN, ROLE_CUSTOMER] }
    - { path: ^/api/demo, methods: [GET], roles: [ROLE_ADMIN] }
    - { path: ^/api/demo, methods: [POST], roles: [ROLE_ADMIN, ROLE_CUSTOMER] }
    - { path: ^/api/dms/signable-document, methods: [GET], roles: [ROLE_USER, ROLE_CUSTOMER] }
    - { path: ^/api/dms/payment-methods, methods: [GET], roles: [ROLE_USER, ROLE_GLOBAL_PAY] }
    - { path: ^/api/dms/repair-order-by-number, methods: [GET], roles: [ROLE_USER] }
    - { path: ^/api/dms/repair-order, methods: [GET], roles: [ROLE_USER] }
    - { path: ^/api/dms/sync-employees, methods: [GET], roles: [ROLE_ADMIN, ROLE_SERVICE_MANAGER, ROLE_SALES_MANAGER, ROLE_BDC_MANAGER, ROLE_FINANCE_MANAGER] }
    - { path: ^/api/security/validate, role: PUBLIC_ACCESS }
    - { path: ^/api/security/reset-password, role: PUBLIC_ACCESS }
    - { path: ^/api/security/forgot, role: PUBLIC_ACCESS }
    - { path: ^/api/security/get-security-question, role: PUBLIC_ACCESS }
    - { path: ^/api/marketing-sms/twilio-incoming, role: PUBLIC_ACCESS }
    - { path: ^/api/service-sms/twilio-incoming, role: PUBLIC_ACCESS }
    - { path: ^/api/service-sms/status-callback, role: PUBLIC_ACCESS }
    - { path: ^/api/campaign, roles: [ ROLE_USER ] }
    - { path: ^/api/check-in, methods: [POST, GET], roles: [ROLE_USER] }
    - { path: ^/api/coupons, methods: [GET], roles: [IS_AUTHENTICATED_FULLY] }
    - { path: ^/api/coupons, methods: [POST, PUT, DELETE], roles: [ROLE_ADMIN, ROLE_SERVICE_MANAGER] }
    - { path: ^/api/customer-vehicle, methods: [GET, POST, DELETE], roles: [ROLE_GUEST_USER, ROLE_USER] }
    - { path: ^/api/customer/find-by-phone, methods: [GET], roles: [ROLE_GUEST_USER] }
    - { path: ^/api/customer/mobileConfirmed, methods: [POST], roles: [ROLE_USER] }
    - { path: ^/api/customer/revoke-refresh-token, methods: [PATCH], roles: [ROLE_CUSTOMER, ROLE_USER] }
    - { path: ^/api/customer, methods: [POST], roles: [ROLE_USER, ROLE_GUEST_USER] }
    - { path: ^/api/customer, methods: [GET, PUT], roles: [ROLE_USER] }
    - { path: ^/api/customer, methods: [DELETE], roles: [ROLE_ADMIN, ROLE_SERVICE_MANAGER, ROLE_SALES_MANAGER, ROLE_FINANCE_MANAGER] }
    - { path: ^/api/communication-log, methods: [GET, POST, PUT, DELETE], roles: [ROLE_ADMIN, ROLE_SERVICE_MANAGER, ROLE_BDC_MANAGER] }
    - { path: ^/api/internal-message/threads, methods: [GET], roles: [ROLE_USER] }
    - { path: ^/api/internal-message/messages, methods: [GET], roles: [ROLE_USER] }
    - { path: ^/api/internal-message, methods: [POST], roles: [ROLE_USER] }
    - { path: ^/api/motor/search-by-vin, methods: [GET], roles: [ROLE_USER] }
    - { path: ^/api/mpi-template, methods: [GET], roles: [ROLE_USER] }
    - { path: ^/api/mpi-template, methods: [PUT, POST, DELETE], roles: [ROLE_ADMIN, ROLE_SERVICE_MANAGER] }
    - { path: ^/api/mpi-group, methods: [PUT, POST, DELETE], roles: [ROLE_ADMIN, ROLE_SERVICE_MANAGER] }
    - { path: ^/api/mpi-item, methods: [PUT, POST, DELETE], roles: [ROLE_ADMIN, ROLE_SERVICE_MANAGER] }
    - { path: ^/api/mpi-item, methods: [GET], roles: [ROLE_USER] }
    - { path: ^/api/message/unread, methods: [GET], roles: [ROLE_USER] }
    - { path: ^/api/my-loan/send, methods: [POST], roles: [ROLE_ADMIN, ROLE_SERVICE_MANAGER, ROLE_SERVICE_ADVISOR] }
    - { path: ^/api/my-loan/view, methods: [POST], roles: [ROLE_CUSTOMER] }
    - { path: ^/api/my-loan/request-application, methods: [POST], roles: [ROLE_CUSTOMER] }
    - { path: ^/api/my-loan, methods: [GET, POST], roles: [ROLE_ADMIN, ROLE_SERVICE_MANAGER, ROLE_SERVICE_ADVISOR, ROLE_CUSTOMER] }
    - { path: ^/api/my-review/view, methods: [POST], roles: [ROLE_CUSTOMER] }
    - { path: ^/api/my-review/outcome, methods: [POST], roles: [ROLE_CUSTOMER] }
    - { path: ^/api/my-review/resend, methods: [POST], roles: [ROLE_ADMIN, ROLE_SERVICE_MANAGER, ROLE_SERVICE_ADVISOR] }
    - { path: ^/api/operation-code-quote-misc-charge, methods: [GET], roles: [ROLE_USER] }
    - { path: ^/api/operation-code-quote-misc-charge, methods: [POST, DELETE], roles: [ROLE_ADMIN, ROLE_SERVICE_MANAGER] }
    - { path: ^/api/operation-code-quote-discount, methods: [ GET ], roles: [ ROLE_USER ] }
    - { path: ^/api/operation-code-quote-discount, methods: [ POST, DELETE], roles: [ ROLE_ADMIN, ROLE_SERVICE_MANAGER] }
    - { path: ^/api/operation-code, methods: [GET], roles: [ROLE_USER] }
    - { path: ^/api/operation-code, methods: [POST, PUT, DELETE], roles: [ROLE_ADMIN, ROLE_SERVICE_MANAGER] }
    - { path: ^/api/motor/parts/systems, methods: [GET], roles: [ROLE_USER] }
    - { path: ^/api/motor/parts/groups, methods: [GET], roles: [ROLE_USER] }
    - { path: ^/api/motor/parts/sub-groups, methods: [GET], roles: [ROLE_USER] }
    - { path: ^/api/motor/parts, methods: [GET], roles: [ROLE_USER] }
    - { path: ^/api/motor/estimated-work-times/systems, methods: [GET], roles: [ROLE_USER] }
    - { path: ^/api/motor/estimated-work-times/groups, methods: [GET], roles: [ROLE_USER] }
    - { path: ^/api/motor/estimated-work-times, methods: [GET], roles: [ROLE_USER] }
    - { path: ^/api/motor/vehicle/by-vin, methods: [GET], roles: [ROLE_USER] }
    - { path: ^/api/motor/vehicle/years, methods: [ GET ], roles: [ ROLE_USER ] }
    - { path: ^/api/motor/vehicle/makes, methods: [ GET ], roles: [ ROLE_USER ] }
    - { path: ^/api/motor/vehicle/models, methods: [ GET ], roles: [ ROLE_USER ] }
    - { path: ^/api/motor/vehicle/base-vehicle-details, methods: [ GET ], roles: [ ROLE_USER ] }
    - { path: ^/api/motor/vehicle/engines, methods: [ GET ], roles: [ ROLE_USER ] }
    - { path: ^/api/part-source, methods: [GET], roles: [ROLE_USER] }
    - { path: ^/api/part-source, methods: [POST, PUT, DELETE], roles: [ROLE_ADMIN, ROLE_SERVICE_MANAGER, ROLE_SERVICE_ADVISOR, ROLE_PARTS_ADVISOR] }
    - { path: ^/api/part-source-labor-rate-matrix, methods: [GET], roles: [ROLE_USER] }
    - { path: ^/api/part-source-labor-rate-matrix, methods: [POST, PUT, DELETE], roles: [ROLE_ADMIN, ROLE_SERVICE_MANAGER, ROLE_SERVICE_ADVISOR, ROLE_PARTS_ADVISOR] }
    - { path: ^/api/parts-express-task/start/additional-processing, methods: [POST], roles: [ROLE_PARTS_ADVISOR] }
    - { path: ^/api/parts-express-task/start, methods: [POST], roles: [ROLE_PARTS_ADVISOR] }
    - { path: ^/api/parts-express-task/complete, methods: [POST], roles: [ROLE_PARTS_ADVISOR] }
    - { path: ^/api/parts-express-task, methods: [GET], roles: [ROLE_PARTS_ADVISOR] }
    - { path: ^/api/parts-express, methods: [GET], roles: [ROLE_USER] }
    - { path: ^/api/parts/suggested, methods: [GET], roles: [ROLE_USER] }
    - { path: ^/api/parts, methods: [GET], roles: [ROLE_USER] }
    - { path: ^/api/parts, methods: [POST, PUT, DELETE], roles: [ROLE_ADMIN, ROLE_SERVICE_MANAGER, ROLE_SERVICE_ADVISOR, ROLE_PARTS_ADVISOR] }
    - { path: ^/api/part-matrix, methods: [GET], roles: [ROLE_USER]}
    - { path: ^/api/part-matrix, methods: [POST, PUT, DELETE], roles: [ROLE_ADMIN, ROLE_SERVICE_MANAGER, ROLE_SERVICE_ADVISOR, ROLE_PARTS_ADVISOR]}
    - { path: ^/api/payment-saved-card, methods: [GET, PUT, DELETE], roles: [ROLE_ADMIN, ROLE_SERVICE_MANAGER, ROLE_SERVICE_ADVISOR, ROLE_CUSTOMER] }
    - { path: ^/api/payment-terminal, methods: [GET], roles: [ROLE_USER, ROLE_GLOBAL_PAY] }
    - { path: ^/api/payment-terminal, methods: [PATCH, POST, DELETE], roles: [ROLE_ADMIN, ROLE_SERVICE_MANAGER, ROLE_GLOBAL_PAY] }
    - { path: ^/api/payment/link-hash, methods: [GET], roles: [ROLE_CUSTOMER] }
    - { path: ^/api/payment/pay, methods: [POST], roles: [ROLE_ADMIN, ROLE_SERVICE_MANAGER, ROLE_SALES_MANAGER, ROLE_SALES_AGENT, ROLE_FINANCE_MANAGER, ROLE_PARTS_ADVISOR, ROLE_CUSTOMER] }
    - { path: ^/api/payment/confirm, methods: [POST], roles: [ROLE_ADMIN, ROLE_SERVICE_MANAGER, ROLE_SALES_MANAGER, ROLE_SALES_AGENT, ROLE_FINANCE_MANAGER, ROLE_PARTS_ADVISOR] }
    - { path: ^/api/payment/view, methods: [POST], roles: [ROLE_CUSTOMER] }
    - { path: ^/api/payment/send-receipt, methods: [POST], roles: [ROLE_ADMIN, ROLE_SERVICE_MANAGER, ROLE_SERVICE_ADVISOR, ROLE_CUSTOMER] }
    - { path: ^/api/payment/send, methods: [POST], roles: [ROLE_ADMIN, ROLE_SERVICE_MANAGER, ROLE_SALES_MANAGER, ROLE_SALES_AGENT, ROLE_FINANCE_MANAGER, ROLE_PARTS_ADVISOR] }
    - { path: ^/api/payment/refund, methods: [POST], roles: [ROLE_USER] }
    - { path: ^/api/payment, methods: [GET, POST, PUT, DELETE], roles: [ROLE_ADMIN, ROLE_SERVICE_MANAGER, ROLE_SALES_MANAGER, ROLE_SALES_AGENT, ROLE_FINANCE_MANAGER, ROLE_PARTS_ADVISOR] }
    - { path: ^/api/phone-lookup, methods: [POST], roles: [ROLE_USER] }
    - { path: ^/api/price-matrix, methods: [GET], roles: [ROLE_USER] }
    - { path: ^/api/price-matrix, methods: [POST], roles: [ROLE_ADMIN, ROLE_SERVICE_MANAGER] }
    - { path: ^/api/predefined-campaign-filter, methods: [GET, POST, PUT, DELETE], roles: [ROLE_ADMIN, ROLE_SERVICE_MANAGER, ROLE_BDC_MANAGER, ROLE_BDC] }
    - { path: ^/api/repair-order-reconditioning-phase-interaction, methods: [ GET, POST ], roles: [ ROLE_USER, ROLE_ADMIN ] }
    - { path: ^/api/quote-discount, methods: [GET, POST, PUT, DELETE], roles: [ROLE_USER] }
    - { path: ^/api/quote-misc-charge, methods: [GET, POST, PUT, DELETE], roles: [ROLE_USER] }
    - { path: ^/api/repair-order/link-hash, methods: [GET], roles: [IS_AUTHENTICATED_FULLY] }
    - { path: ^/api/repair-order/appraise-click, methods: [POST], roles: [ROLE_CUSTOMER] }
    - { path: ^/api/repair-order/custom-card, methods: [POST], roles: [ROLE_USER, ROLE_CUSTOMER] }
    - { path: ^/api/repair-order/finance-click, methods: [POST], roles: [ROLE_CUSTOMER] }
    - { path: ^/api/repair-order/coupon-click, methods: [POST], roles: [ROLE_CUSTOMER] }
    - { path: ^/api/repair-order/re-open, methods: [POST], roles: [ROLE_ADMIN, ROLE_SERVICE_MANAGER] }
    - { path: ^/api/repair-order/un-delete, methods: [POST], roles: [ROLE_ADMIN, ROLE_SERVICE_MANAGER] }
    - { path: ^/api/repair-order/repair-order-numbers/suggested, methods: [GET], roles: [ROLE_ADMIN, ROLE_SERVICE_MANAGER, ROLE_SERVICE_ADVISOR] }
    - { path: ^/api/repair-order/quote-in-progress, methods: [POST], roles: [ROLE_ADMIN, ROLE_SERVICE_MANAGER, ROLE_SERVICE_ADVISOR, ROLE_TECHNICIAN, ROLE_PARTS_ADVISOR] }
    - { path: ^/api/repair-order/customer-pricing, methods: [POST], roles: [ROLE_CUSTOMER] }
    - { path: ^/api/repair-order-customer, methods: [POST, DELETE], roles: [ROLE_ADMIN, ROLE_SERVICE_MANAGER, ROLE_SERVICE_ADVISOR] }
    - { path: ^/api/repair-order-interactions, methods: [GET], roles: [ROLE_USER] }
    - { path: ^/api/repair-order-mpi/view, methods: [POST], roles: [ROLE_CUSTOMER] }
    - { path: ^/api/repair-order-mpi/complete, methods: [POST], roles: [ROLE_ADMIN, ROLE_SERVICE_MANAGER, ROLE_TECHNICIAN] }
    - { path: ^/api/repair-order-mpi, methods: [POST, PUT, DELETE], roles: [ROLE_ADMIN, ROLE_SERVICE_MANAGER, ROLE_SERVICE_ADVISOR, ROLE_TECHNICIAN] }
    - { path: ^/api/repair-order-multi-point-inspection, methods: [POST, PUT, DELETE], roles: [ROLE_ADMIN, ROLE_SERVICE_MANAGER, ROLE_SERVICE_ADVISOR, ROLE_TECHNICIAN] }
    - { path: ^/api/repair-order-multi-point-inspection, methods: [GET], roles: [ROLE_CUSTOMER, ROLE_ADMIN, ROLE_SERVICE_MANAGER, ROLE_SERVICE_ADVISOR, ROLE_TECHNICIAN] }
    - { path: ^/api/repair-order-checklist, methods: [GET, POST, PUT, DELETE], roles: [ROLE_ADMIN, ROLE_SERVICE_MANAGER, ROLE_SERVICE_ADVISOR, ROLE_TECHNICIAN] }
    - { path: ^/api/repair-order-note, methods: [POST, DELETE], roles: [ROLE_ADMIN, ROLE_SERVICE_MANAGER, ROLE_SERVICE_ADVISOR, ROLE_TECHNICIAN, ROLE_PARTS_ADVISOR] }
    - { path: ^/api/repair-order-payment, methods: [GET], roles: [ROLE_USER, ROLE_CUSTOMER] }
    - { path: ^/api/repair-order-payment/view, methods: [POST], roles: [ROLE_CUSTOMER] }
    - { path: ^/api/repair-order-payment/pay, methods: [POST], roles: [ROLE_ADMIN, ROLE_SERVICE_MANAGER, ROLE_SERVICE_ADVISOR, ROLE_CUSTOMER] }
    - { path: ^/api/repair-order-payment/refund, methods: [POST], roles: [ROLE_USER] }
    - { path: ^/api/repair-order-payment/send-receipt, methods: [POST], roles: [ROLE_ADMIN, ROLE_SERVICE_MANAGER, ROLE_SERVICE_ADVISOR, ROLE_CUSTOMER] }
    - { path: ^/api/repair-order-payment, methods: [POST, DELETE], roles: [ROLE_ADMIN, ROLE_SERVICE_MANAGER, ROLE_SERVICE_ADVISOR] }
    - { path: ^/api/repair-order-pick-list-part/picked, methods: [POST], roles: [ROLE_USER] }
    - { path: ^/api/repair-order-pick-list-part/picked-up, methods: [POST], roles: [ROLE_USER] }
    - { path: ^/api/repair-order-pick-list-part, methods: [GET, POST], roles: [ROLE_USER] }
    - { path: ^/api/repair-order-quote-discount, methods: [POST, DELETE], roles: [ROLE_USER] }
    - { path: ^/api/repair-order-quote-misc-charge, methods: [POST, DELETE], roles: [ROLE_USER] }
    - { path: ^/api/repair-order-quote-recommendation-part, methods: [ POST, PATCH, DELETE ], roles: [ ROLE_USER ] }
    - { path: ^/api/repair-order-quote-recommendation, methods: [ POST, PATCH, DELETE ], roles: [ ROLE_USER ] }
    - { path: ^/api/repair-order-quote/in-progress, methods: [POST], roles: [ROLE_ADMIN, ROLE_SERVICE_MANAGER, ROLE_SERVICE_ADVISOR, ROLE_TECHNICIAN, ROLE_PARTS_ADVISOR] }
    - { path: ^/api/repair-order-quote/send, methods: [POST], roles: [ROLE_ADMIN, ROLE_SERVICE_MANAGER, ROLE_SERVICE_ADVISOR] }
    - { path: ^/api/repair-order-quote/view, methods: [POST], roles: [ROLE_CUSTOMER, ROLE_ADMIN] }
    - { path: ^/api/repair-order-quote/confirm, methods: [POST], roles: [ROLE_ADMIN, ROLE_SERVICE_MANAGER, ROLE_SERVICE_ADVISOR] }
    - { path: ^/api/repair-order-quote/complete, methods: [POST], roles: [ROLE_ADMIN, ROLE_SERVICE_MANAGER, ROLE_SERVICE_ADVISOR, ROLE_CUSTOMER] }
    - { path: ^/api/repair-order-quote/pull-recommendations, methods: [POST], roles: [ROLE_ADMIN, ROLE_SERVICE_MANAGER, ROLE_SERVICE_ADVISOR, ROLE_TECHNICIAN] }
    - { path: ^/api/repair-order-quote/push-recommendations, methods: [POST], roles: [ROLE_ADMIN, ROLE_SERVICE_MANAGER, ROLE_SERVICE_ADVISOR, ROLE_TECHNICIAN] }
    - { path: ^/api/repair-order-quote/sync-pre-approvals, methods: [POST], roles: [ROLE_ADMIN, ROLE_SERVICE_MANAGER, ROLE_SERVICE_ADVISOR, ROLE_TECHNICIAN] }
    - { path: ^/api/repair-order-quote, methods: [GET], roles: [ROLE_USER, ROLE_CUSTOMER] }
    - { path: ^/api/repair-order-quote, methods: [ POST, PUT, DELETE ], roles: [ ROLE_ADMIN, ROLE_SERVICE_MANAGER, ROLE_SERVICE_ADVISOR, ROLE_PARTS_ADVISOR, ROLE_TECHNICIAN ] }
    - { path: ^/api/repair-order-team, methods: [POST, DELETE], roles: [ROLE_ADMIN, ROLE_SERVICE_MANAGER, ROLE_SERVICE_ADVISOR, ROLE_TECHNICIAN, ROLE_PARTS_ADVISOR] }
    - { path: ^/api/repair-order-video/view, methods: [POST], roles: [ROLE_CUSTOMER] }
    - { path: ^/api/repair-order-video/send, methods: [POST], roles: [ROLE_ADMIN, ROLE_SERVICE_MANAGER, ROLE_SERVICE_ADVISOR, ROLE_TECHNICIAN] }
    - { path: ^/api/repair-order-video/send-all, methods: [POST], roles: [ROLE_ADMIN, ROLE_SERVICE_MANAGER, ROLE_SERVICE_ADVISOR, ROLE_TECHNICIAN] }
    - { path: ^/api/repair-order-video/mark-drafts-uploaded, methods: [POST], roles: [ROLE_ADMIN, ROLE_SERVICE_MANAGER, ROLE_SERVICE_ADVISOR, ROLE_TECHNICIAN] }
    - { path: ^/api/repair-order-video, methods: [GET], roles: [ROLE_USER, ROLE_CUSTOMER] }
    - { path: ^/api/repair-order-video, methods: [POST, DELETE], roles: [ROLE_ADMIN, ROLE_SERVICE_MANAGER, ROLE_SERVICE_ADVISOR, ROLE_TECHNICIAN] }
    - { path: ^/api/repair-order-media, methods: [ GET ], roles: [ ROLE_USER, ROLE_CUSTOMER ] }
    - { path: ^/api/repair-order-media, methods: [ POST, DELETE, PATCH ], roles: [ ROLE_ADMIN, ROLE_SERVICE_MANAGER, ROLE_SERVICE_ADVISOR, ROLE_TECHNICIAN, ROLE_PARTS_ADVISOR ] }
    - { path: ^/api/repair-order-waiver/signed, methods: [POST], roles: [ROLE_CUSTOMER] }
    - { path: ^/api/repair-order-waiver/viewed, methods: [POST], roles: [ROLE_CUSTOMER] }
    - { path: ^/api/repair-order-waiver/acknowledged, methods: [POST], roles: [ROLE_CUSTOMER] }
    - { path: ^/api/repair-order-waiver/re-send, methods: [POST], roles: [ROLE_ADMIN, ROLE_SERVICE_MANAGER, ROLE_SERVICE_ADVISOR] }
    - { path: ^/api/repair-order-service-phase-interaction, methods: [ GET, POST ], roles: [ ROLE_USER, ROLE_ADMIN ] }
    - { path: ^/api/repair-order, methods: [POST, PUT, DELETE], roles: [ROLE_ADMIN, ROLE_SERVICE_MANAGER, ROLE_SERVICE_ADVISOR, ROLE_PARTS_ADVISOR] }
    - { path: ^/api/repair-order, methods: [GET], roles: [ROLE_USER, ROLE_CUSTOMER] } # Ordered at end of RO endpoints
    - { path: ^/api/reporting, methods: [GET], roles: [ROLE_USER] }
    - { path: ^/api/rewards, methods: [GET], roles: [ROLE_USER, ROLE_CUSTOMER] }
    - { path: ^/api/security, methods: [PATCH], roles: [ROLE_USER] }
    - { path: ^/api/service-express, methods: [GET], roles: [ROLE_USER] }
    - { path: ^/api/service-lane-off-hour, methods: [GET, POST, PUT, DELETE], roles: [ROLE_ADMIN, ROLE_SERVICE_MANAGER] }
    - { path: ^/api/sms/mark-read, methods: [POST], roles: [ROLE_ADMIN, ROLE_SERVICE_MANAGER, ROLE_BDC_MANAGER] }
    - { path: ^/api/sms/messages, methods: [GET], roles: [ROLE_ADMIN, ROLE_SERVICE_MANAGER, ROLE_SERVICE_ADVISOR, ROLE_BDC_MANAGER, ROLE_BDC, ROLE_SALES_MANAGER]}
    - { path: ^/api/sms/messages, methods: [POST], roles: [ROLE_ADMIN, ROLE_SERVICE_MANAGER, ROLE_SERVICE_ADVISOR, ROLE_BDC_MANAGER, ROLE_BDC]}
    - { path: ^/api/sms/threads, methods: [GET], roles: [ROLE_ADMIN, ROLE_SERVICE_MANAGER, ROLE_BDC_MANAGER, ROLE_SERVICE_ADVISOR, ROLE_BDC] }
    - { path: ^/api/sms, methods: [POST], roles: [ROLE_ADMIN, ROLE_SERVICE_MANAGER, ROLE_SERVICE_ADVISOR, ROLE_BDC] }
    - { path: ^/api/sms, methods: [GET], roles: [ROLE_ADMIN, ROLE_SERVICE_MANAGER, ROLE_SERVICE_ADVISOR] }
    - { path: ^/api/service-group-capacity, methods: [GET, POST, PUT, DELETE], roles: [ROLE_ADMIN, ROLE_SERVICE_MANAGER] }
    - { path: ^/api/service-group, methods: [GET, POST, PUT, DELETE], roles: [ROLE_ADMIN, ROLE_SERVICE_MANAGER] }
    - { path: ^/api/settings/local-config/value, methods: [GET], roles: [ROLE_ADMIN] }
    - { path: ^/api/settings/local-config, methods: [ POST ], roles: [ ROLE_ADMIN, ROLE_GLOBAL_PAY ] }
    - { path: ^/api/settings/local-config, methods: [ GET ], roles: [ ROLE_SERVICE_MANAGER, ROLE_SERVICE_ADVISOR, ROLE_TECHNICIAN, ROLE_PARTS_ADVISOR, ROLE_SALES_MANAGER, ROLE_SALES_AGENT, ROLE_USER, ROLE_BDC_MANAGER, ROLE_BDC, ROLE_ADMIN, ROLE_GLOBAL_PAY ] }
    - { path: ^/api/settings/environment, methods: [POST], roles: [ROLE_ADMIN, ROLE_GLOBAL_PAY] }
    - { path: ^/api/settings/environment, methods: [GET], roles: [ROLE_SERVICE_MANAGER, ROLE_SERVICE_ADVISOR, ROLE_TECHNICIAN, ROLE_PARTS_ADVISOR, ROLE_SALES_MANAGER, ROLE_SALES_AGENT, ROLE_USER, ROLE_BDC_MANAGER, ROLE_BDC, ROLE_ADMIN, ROLE_GLOBAL_PAY] }
    - { path: ^/api/settings, methods: [GET], roles: [IS_AUTHENTICATED_FULLY]}
    - { path: ^/api/settings, methods: [POST], roles: [ROLE_ADMIN, ROLE_SERVICE_MANAGER, ROLE_GLOBAL_PAY] }
    - { path: ^/api/service-quick-sms, roles: [ROLE_ADMIN, ROLE_SERVICE_MANAGER, ROLE_SERVICE_ADVISOR] }
    - { path: ^/api/service-quick-sms-group, roles: [ROLE_ADMIN, ROLE_SERVICE_MANAGER, ROLE_SERVICE_ADVISOR] }
    - { path: ^/api/users/current, roles: [ROLE_USER, ROLE_GLOBAL_PAY] }
    - { path: ^/api/users/externally-authenticated, roles: [ROLE_ADMIN] }
    - { path: ^/api/users/revoke-refresh-token, methods: [PATCH], roles: [ROLE_USER] }
    - { path: ^/api/users, methods: [GET, PUT], roles: [ROLE_USER] }
    - { path: ^/api/users, methods: [POST, DELETE], roles: [ROLE_ADMIN, ROLE_SERVICE_MANAGER, ROLE_SALES_MANAGER, ROLE_FINANCE_MANAGER, ROLE_BDC_MANAGER] }
    - { path: ^/api/reynolds, roles: [ROLE_ADMIN] }
    - { path: ^/api/kbb, roles: [ROLE_USER, ROLE_GUEST_USER] }
    - { path: ^/api/labor-rate-matrix, methods: [GET, POST, PATCH], roles: [ROLE_USER] }
    - { path: ^/api/labor-rate, methods: [POST, PUT, DELETE], roles: [ROLE_ADMIN, ROLE_SERVICE_MANAGER] }
    - { path: ^/api/transportation-type, methods: [POST, PUT, DELETE], roles: [ROLE_ADMIN, ROLE_SERVICE_MANAGER] }
    - { path: ^/api/transportation-type, methods: [GET], roles: [IS_AUTHENTICATED_FULLY] }
    - { path: ^/api/communication-type, roles: [ROLE_ADMIN, ROLE_SERVICE_MANAGER, ROLE_BDC_MANAGER] }
    - { path: ^/api/uv-eye, methods: [GET], roles: [ROLE_USER] }
    - { path: ^/api/vehicle, methods: [GET], roles: [ROLE_USER] }
    - { path: ^/api/service-phase/re-assign, methods: [POST], roles: [ROLE_ADMIN, ROLE_SERVICE_MANAGER] }
    - { path: ^/api/service-phase, methods: [GET], roles: [ROLE_USER] }
    - { path: ^/api/service-phase, methods: [POST, PUT, DELETE], roles: [ROLE_ADMIN, ROLE_SERVICE_MANAGER] }
    - { path: ^/api/part-matrix-value, methods: [ GET ], roles: [ ROLE_USER ] }
    - { path: ^/api/part-matrix-value, methods: [ POST, PUT, DELETE ], roles: [ ROLE_ADMIN, ROLE_SERVICE_MANAGER, ROLE_SERVICE_ADVISOR, ROLE_PARTS_ADVISOR ] }
    - { path: ^/api/repair-order-reconditioning-phase-interaction, methods: [ GET, POST ], roles: [ ROLE_USER, ROLE_ADMIN ] }
    - { path: ^/api/reconditioning-phase/re-assign, methods: [POST], roles: [ROLE_ADMIN, ROLE_SERVICE_MANAGER] }
    - { path: ^/api/reconditioning-phase, methods: [GET], roles: [ROLE_USER] }
    - { path: ^/api/reconditioning-phase, methods: [POST, PUT, DELETE], roles: [ROLE_ADMIN, ROLE_SERVICE_MANAGER] }
    - { path: ^/api/traxtion/scan, methods: [POST], role: PUBLIC_ACCESS }
    - { path: ^/api/state, methods: [GET], roles: [ROLE_USER] }
    - { path: ^/api/carfax/license-plate-lookup, methods: [GET], roles: [ROLE_USER, ROLE_GUEST_USER] }
    - { path: ^/api/carfax/vin-lookup, methods: [GET], roles: [ROLE_USER] }
    - { path: ^/api/stocking-statuses, methods: [GET], roles: [ROLE_USER] }
    - { path: ^/api/deferrals, methods: [GET], roles: [ROLE_USER, ROLE_GUEST_USER] }
    - { path: ^/api/repair-order-excluded-customer, methods: [ GET, POST, DELETE ], roles: [ ROLE_ADMIN, ROLE_SERVICE_MANAGER ] }
    - { path: ^/api/internal-signoff, roles: [ROLE_USER] }
    - { path: ^/api/factory-maintenance-menu, roles: [ROLE_SERVICE_MANAGER] }
    - { path: ^/api, role: IS_AUTHENTICATED_FULLY } # Defined at bottom or else it will overwrite rules above

