NextCRM

Roles and access

Roles, the partner route allow-list and the partner entry points, read from the code.

The access facts that live in code. What the roles mean and how the checks work: Auth and permissions.

Roles

From APP_ROLES in lib/authz/roles.ts. Roles outside SCOPED_ROLES get no rows from the scope helpers unless they have their own branch (partner: lib/authz/scopes/partner.ts).

RoleIn SCOPED_ROLES
useryes
manageryes
adminyes
partnerno

Partner routes

PARTNER_ROUTES in lib/partner-routes.ts, enforced by proxy.ts. A partner may open these paths and everything below them (* is one path segment), plus the dashboard. Every other page redirects to the dashboard and every other API route answers 403.

  • /api/auth
  • /api/documents/*/file
  • /api/invoices/*/pdf
  • /crm/accounts
  • /crm/contacts
  • /crm/leads
  • /crm/opportunities
  • /crm/orders
  • /crm/tasks
  • /sign-in

Partner entry points

Files that call getSession() or requireAuthenticated() with the partner option set to true. Everywhere else a partner is refused. __tests__/authz/partner-entry-points.test.ts fails when this set changes without review.

  • actions/crm/account/get-task.ts
  • actions/crm/account/get-tasks.ts
  • actions/crm/accounts/create-account.ts
  • actions/crm/accounts/create-task.ts
  • actions/crm/accounts/get-account-by-id.ts
  • actions/crm/accounts/get-accounts.ts
  • actions/crm/accounts/search-accounts.ts
  • actions/crm/accounts/update-account.ts
  • actions/crm/activities/create-activity.ts
  • actions/crm/activities/get-activities-by-entity.ts
  • actions/crm/activities/update-activity.ts
  • actions/crm/audit-log/get-audit-log-by-entity.ts
  • actions/crm/contacts/create-contact.ts
  • actions/crm/contacts/update-contact.ts
  • actions/crm/get-account.ts
  • actions/crm/get-accounts-by-contactId.ts
  • actions/crm/get-accounts-by-opportunityId.ts
  • actions/crm/get-accounts.ts
  • actions/crm/get-contact.ts
  • actions/crm/get-contacts-by-accountId.ts
  • actions/crm/get-contacts-by-opportunityId.ts
  • actions/crm/get-contacts.ts
  • actions/crm/get-contracts.ts
  • actions/crm/get-crm-data.ts
  • actions/crm/get-lead.ts
  • actions/crm/get-leads-by-accountId.ts
  • actions/crm/get-leads.ts
  • actions/crm/get-opportunities-with-includes-by-accountId.ts
  • actions/crm/get-opportunities-with-includes-by-contactId.ts
  • actions/crm/get-opportunities-with-includes.ts
  • actions/crm/get-opportunity.ts
  • actions/crm/leads/create-lead.ts
  • actions/crm/leads/update-lead.ts
  • actions/crm/opportunities/create-opportunity.ts
  • actions/crm/opportunities/update-opportunity.ts
  • actions/crm/opportunity/get-expected-revenue.ts
  • actions/crm/orders/queries.ts
  • actions/crm/similarity/get-similar-accounts.ts
  • actions/crm/similarity/get-similar-contacts.ts
  • actions/crm/similarity/get-similar-leads.ts
  • actions/crm/similarity/get-similar-opportunities.ts
  • actions/crm/tasks/add-comment.ts
  • actions/dashboard/get-accounts-count.ts
  • actions/dashboard/get-active-users-count.ts
  • actions/dashboard/get-boards-count.ts
  • actions/dashboard/get-campaigns-count.ts
  • actions/dashboard/get-contacts-count.ts
  • actions/dashboard/get-contracts-count.ts
  • actions/dashboard/get-documents-count.ts
  • actions/dashboard/get-invoices-count.ts
  • actions/dashboard/get-leads-count.ts
  • actions/dashboard/get-opportunities-count.ts
  • actions/dashboard/get-targets-count.ts
  • actions/dashboard/get-tasks-count.ts
  • actions/documents/get-document-versions.ts
  • actions/documents/get-documents-by-accountId.ts
  • actions/documents/get-documents-by-contactId.ts
  • actions/documents/get-documents-by-opportunityId.ts
  • actions/documents/get-documents.ts
  • actions/documents/get-storage-size.ts
  • actions/documents/search-documents.ts
  • actions/get-users.ts
  • actions/invoices/get-invoices-by-accountId.ts
  • actions/user/get-user-by-id.ts
  • actions/user/search-users.ts
  • actions/user/set-language.ts
  • app/[locale]/(routes)/crm/accounts/[accountId]/components/HistoryTab.tsx
  • app/[locale]/(routes)/crm/accounts/[accountId]/page.tsx
  • app/[locale]/(routes)/crm/contacts/[contactId]/components/HistoryTab.tsx
  • app/[locale]/(routes)/crm/leads/[leadId]/components/HistoryTab.tsx
  • app/[locale]/(routes)/crm/opportunities/[opportunityId]/components/HistoryTab.tsx
  • app/[locale]/(routes)/crm/orders/[orderId]/page.tsx
  • app/[locale]/(routes)/page.tsx
  • app/api/documents/[documentId]/file/route.ts
  • app/api/invoices/[invoiceId]/pdf/route.ts

On this page