Skip to content

Logger for Auditing

ts
import { createPermit } from '@vielzeug/permit';

const audit: string[] = [];

const permit = createPermit([{ role: 'viewer', resource: 'posts', action: 'read', effect: 'allow' }], {
  logger: ({ action, decision, principal, resource, rule }) => {
    const identity = principal === null ? 'anonymous' : principal.id;
    const matched = rule ? `${rule.role}:${rule.effect}` : 'no-match';
    audit.push(`${identity}:${resource}:${action}:${decision}:${matched}`);
  },
});

permit.can({ id: 'u1', roles: ['viewer'] }, 'posts', 'read');
permit.can({ id: 'u1', roles: ['viewer'] }, 'posts', 'delete');