Skip to content

Access Control

The access control system restricts storefront access to approved B2B customers. It uses IP-based tracking with an admin approval workflow.

Customer visits storefront
Gatekeeper checks IP
┌────┴────┐
│ Approved │──► Full storefront access
└─────────┘
│ Pending │──► "Your request is being reviewed" message
└─────────┘
│ Rejected │──► "Access denied" message
└─────────┘
│ None │──► Show access request form
└─────────┘

Set NEXT_PUBLIC_GATEKEEPER_ENABLED=true in the storefront environment to enable the gatekeeper.

When disabled, all visitors have full access.

These paths are always accessible, even when the gatekeeper is enabled:

  • /toegang — Access request page
  • /privacy — Privacy policy
  • /terms — Terms of service
  • /contact — Contact form
GET /store/access-check

Returns the current IP’s access status:

{
"has_access": true,
"status": "approved",
"message": "Access granted"
}

IP detection checks headers in order:

  1. x-forwarded-for
  2. x-real-ip
  3. socket.remoteAddress
POST /store/access-request
{
"name": "John Doe",
"email": "john@company.nl",
"company": "Company B.V.",
"message": "Would like access for B2B ordering"
}
GET /admin/aplt/access-requests # List pending requests
PUT /admin/aplt/access-requests/[id] # Approve or reject

aplt_access_requests

ColumnTypePurpose
idintPrimary key
ip_addressvarcharRequesting IP
emailvarcharRequester email
companyvarcharCompany name
messagetextRequest message
statusvarcharpending, approved, rejected
approved_byvarcharAdmin who approved
approved_attimestampWhen approved
created_attimestampRequest date

Access requests are managed at Admin Panel → ADVANCED → Access Requests (/admin/22-access-requests).