Rollen en rechten: twee lagen, zeven tenantrollen
Platformrollen, tenantrollen, één gedeelde matrix en waarom moduletoegang niet wordt beslist door wie laatst zijn profielnaam wijzigde.
Rechten in een multi-tenant ITAD-platform moeten precies goed of zichtbaar fout zijn. Er is heel weinig nuttig middengebied. ReVend OS gebruikt twee lagen: platformrollen voor de ReVend-operator en organisatierollen voor tenantgebruikers.
Platformrollen
platform_owner beheert het platform end-to-end. platform_staff kan klanten ondersteunen en cross-tenant werken waar de support/admin-flow dat toelaat. platform_viewer is read-only voor overzicht. Platformpagina’s checken platformscope voordat ze platform-only tools tonen zoals health, package plans of trust-scoring-instellingen.
Tenantrollen
Zeven tenantrollen worden vandaag gebruikt: org_admin, org_manager, org_warehouse, org_commercial, org_finance, org_operator en org_viewer. Ze beschrijven de job van de gebruiker binnen de tenant. Package entitlements bepalen welke modules de tenant gekocht heeft; de rol bepaalt welke van die modules iemand mag openen. Beide checks lopen, in die volgorde, en een tab verschijnt pas wanneer allebei ja zeggen.
Eén matrix, drie lezers
Welke rol welke module mag openen staat in één matrix in de code, en de moduletabs, de sidebar, het command palette en de server-side page guards lezen allemaal diezelfde matrix. Market, Auction en Sourcing openen voor beheerder, manager en commercieel. Escrow opent voor beheerder en finance. Finance — facturen, afrekeningen, marges — opent voor beheerder, manager en finance. Testing opent voor beheerder, manager, magazijn en operator. Dashboard, Core, General, Settings en Support staan open voor elke organisatierol. Platform support gaat volledig langs de matrix heen, want impersonation en supportwerk moeten elke pagina kunnen openen. Voordat de matrix bestond, wist de navigatie wat de tenant gekocht had en wisten de page guards wat de rol mocht, en die twee ontmoetten elkaar nooit: een finance-gebruiker had een klikbare Market-tab die eindigde in een kale 404. Eén matrix, drie lezers. Geen tabs meer naar nergens.
Verborgen, geen 404
Een module die je rol niet mag openen staat gewoon niet in de navigatie. Een finance-gebruiker ziet Market, Auction en Sourcing niet; een gebruiker met de rol Commercieel ziet Escrow niet. Settings-pagina’s voor modules die de tenant niet heeft verdwijnen eveneens uit het menu, in plaats van naar de abonnementspagina te stuiteren. Wie er via een bookmark, een mailtje of een oude shortcut tóch belandt, krijgt uitleg: welke module het is, dat deze rol hem niet mag openen, welke rollen wel, en een knop terug naar het dashboard. Tenantbrede instellingen die voor de organisatiebeheerder gereserveerd zijn — facturatie, werkuren, analyticsdrempels — blijven voor iedereen zichtbaar, maar openen voor andere rollen met de melding “Beheerd door je beheerder”. Een pagina die zichzelf uitlegt kost één alinea; een 404 kost een supportticket.
Operator is de standaard
Operator is de rol die een uitnodiging meekrijgt tenzij de uitnodiger iets anders kiest, en het is de rol die het testwerk doet: het testscherm staat open voor beheerder, manager, magazijn en operator. Contracten gaan de andere kant op — een contract aanmaken en bewerken, met zijn diensten en tarieven, zijn vereiste certificeringen en de getekende overeenkomst, is voorbehouden aan beheerder, manager en commercieel, dezelfde kring die er een mag activeren. Magazijn, operator, finance en kijker lezen contracten; zij zien geen knop Bewerken, Beheren of Nieuw contract, en een rechtstreekse servercall wordt geweigerd en gelogd als access denied.
Waar enforcement gebeurt
UI-navigatie helpt, maar de server en de database zijn de volwassenen in de kamer. Serverguards lezen rollen uit membership records, niet uit bewerkbare user metadata. RLS houdt tenantdata tenant-scoped. Admincode met service role moet tenant scope expliciet toevoegen omdat service role RLS omzeilt; dat is macht met papierwerk, geen shortcut.
Admingrenzen
Adminpagina’s zijn platform-only: platformrollen zien cross-tenant platformtools, en niet-platformgebruikers worden uit Admin weggeleid. Tenantprofiel en teambeheer leven in Settings op /settings/organization-profile en /settings/users. Een ontbrekende route is irritant; een gelekte cross-tenant tool is een brandoefening.
Wijzigingen en audit
Rol- en rechtenwijzigingen zijn audit-gevoelig. Het platform registreert wie toegang wijzigde, wat er wijzigde en waarom. Als een gebruiker plots minder knoppen ziet, moet support dat kunnen uitleggen zonder koffiedik te kijken in de browsercache.