Express
rbacMiddleware(rbac, resource, action, options?) — import { rbacMiddleware } from 'rbac-fs/express'.
Usage
import express from 'express';
import { RBAC } from 'rbac-fs';
import { rbacMiddleware } from 'rbac-fs/express';
const rbac = new RBAC({ tenantId: 'acme-corp' });
await rbac.createRole('manager', { permissions: [{ resource: 'invoice', actions: ['approve'] }] });
const app = express();
// Your real auth middleware attaches req.user before this runs —
// rbac-fs never assumes how the user got there, only that it's present.
app.use((req, _res, next) => {
const role = req.header('x-user-role');
if (role) req.user = { id: 'demo-user', role };
next();
});
app.post(
'/invoices/:id/approve',
rbacMiddleware(rbac, 'invoice', 'approve'),
(req, res) => res.json({ approved: req.params.id }),
);A denied check returns a plain 403 by default. Full runnable version: examples/07-express-middleware.mjs.