ForgeTotal.js 5
nl

Total.js 5

Recordactie-audit evenementen met een inheemse audit zink

Total.js 5 · total5@0.0.19 actionsauditsecurity Uitgevoerd met Total.js 5

Een actie kan audit instellen op een tekstsjabloon. Bij succesvolle afronding stuurt het framework een auditrecord naar DEF.onAudit(name, data, context). Het automatische record gebruikt de sinknaam actions en bevat de id van de actie. Een actie kan ook expliciet $.audit(message, type) aanroepen; dat zendt een eigen record uit en kan een type zoals info meedragen.

Het voorbeeld vervangt de audit-sink door een verzamelaar in het geheugen om het contract te inspecteren. Het legt alleen naam, actie-id, bericht en type vast. Het framework bereidt ook contextgegevens en geserialiseerde requestgegevens voor: een echte sink heeft een expliciet beleid nodig voor geheimen, bewaartermijn, toegang en fouten. Een auditgebeurtenis is geen bewijs dat een zakelijke transactie is gecommit; de actie hoort haar succes-callback pas aan te roepen nadat de beoogde schrijfactie is gelukt.

In deze versie gebeurt het automatische audit evenement na de succesvolle actie callback pad. Het logt niet automatisch validatiefouten of mislukte acties.

definitions/audit.js
MAIN.auditEvents = [];
DEF.onAudit = function(name, data) {
	MAIN.auditEvents.push({ sink: name || null, action: data.action, message: data.message || '', type: data.type || null });
};

NEWACTION('AuditExample|save', {
	input: '*name:String',
	audit: 'Saved the example',
	action: function($) {
		$.callback({ ok: true });
	}
});

NEWACTION('AuditExample|explicit', {
	action: function($) {
		$.audit('Explicit example event', 'info');
		$.success();
	}
});

NEWACTION('AuditExample|fail', {
	audit: 'This must not become a success event',
	action: function($) {
		$.invalid(409);
	}
});
controllers/audit.js
exports.install = function() {
	ROUTE('POST /save/ --> *AuditExample|save');
	ROUTE('POST /explicit/ --> *AuditExample|explicit');
	ROUTE('POST /fail/ --> *AuditExample|fail');
	ROUTE('GET /events/', function($) { $.json(MAIN.auditEvents); });
};