PHP code example of azaharizaman / nexus-policy-engine
1. Go to this page and download the library: Download azaharizaman/nexus-policy-engine library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
azaharizaman / nexus-policy-engine example snippets
declare(strict_types=1);
use Nexus\PolicyEngine\Domain\Condition;
use Nexus\PolicyEngine\Domain\ConditionGroup;
use Nexus\PolicyEngine\Domain\PolicyDefinition;
use Nexus\PolicyEngine\Domain\PolicyRequest;
use Nexus\PolicyEngine\Domain\RuleDefinition;
use Nexus\PolicyEngine\Enums\ConditionOperator;
use Nexus\PolicyEngine\Enums\DecisionOutcome;
use Nexus\PolicyEngine\Enums\EvaluationStrategy;
use Nexus\PolicyEngine\Enums\PolicyKind;
use Nexus\PolicyEngine\Services\InMemoryPolicyRegistry;
use Nexus\PolicyEngine\Services\PolicyEvaluator;
use Nexus\PolicyEngine\Services\PolicyValidator;
use Nexus\PolicyEngine\ValueObjects\PolicyId;
use Nexus\PolicyEngine\ValueObjects\PolicyVersion;
use Nexus\PolicyEngine\ValueObjects\ReasonCode;
use Nexus\PolicyEngine\ValueObjects\RuleId;
use Nexus\PolicyEngine\ValueObjects\TenantId;
$registry = new InMemoryPolicyRegistry();
$validator = new PolicyValidator();
$engine = new PolicyEvaluator($registry, $validator);
$policy = new PolicyDefinition(
new PolicyId('auth.rfq.approve'),
new PolicyVersion('v1'),
new TenantId('tenant_a'),
PolicyKind::Authorization,
EvaluationStrategy::CollectAll,
[
new RuleDefinition(
new RuleId('allow.buyer'),
100,
DecisionOutcome::Allow,
new ConditionGroup('all', [
new Condition('role', ConditionOperator::Equals, 'buyer'),
]),
new ReasonCode('role.allowed')
),
new RuleDefinition(
new RuleId('deny.suspended'),
90,
DecisionOutcome::Deny,
new ConditionGroup('all', [
new Condition('is_suspended', ConditionOperator::Equals, true),
]),
new ReasonCode('account.suspended')
),
]
);
$registry->put($policy);
$decision = $engine->evaluate(new PolicyRequest(
new TenantId('tenant_a'),
new PolicyId('auth.rfq.approve'),
new PolicyVersion('v1'),
'approve',
['role' => 'buyer', 'is_suspended' => false]
));
// $decision->outcome === DecisionOutcome::Allow
$decision = $engine->evaluate(new PolicyRequest(
new TenantId('tenant_a'),
new PolicyId('workflow.rfq.review'),
new PolicyVersion('v1'),
'submit',
[],
[],
['risk_level' => 'high', 'amount' => 250000]
));
// Example expected outcome:
// DecisionOutcome::Escalate
$thresholdRule = new RuleDefinition(
new RuleId('escalate.high.value'),
200,
DecisionOutcome::Escalate,
new ConditionGroup('all', [
new Condition('amount', ConditionOperator::GreaterThan, 100000),
]),
new ReasonCode('threshold.exceeded')
);
use Nexus\PolicyEngine\Services\JsonPolicyDecoder;
$decoder = new JsonPolicyDecoder(new PolicyValidator());
$definition = $decoder->decode($jsonPayload);
// $definition is a validated PolicyDefinition ready for registry/evaluation.
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.