title: Policy meta:

  • name: description content: Easyswoole Policy
  • name: keywords content: swoole|swoole extension|swoole framework|easyswoole|Policy

Policy

A policy is a class that organizes authorization logic in a specific model or resource to handle user authorization actions.

Installation

  1. composer require easyswoole/policy

Instructions

  1. use EasySwoole\Policy\PolicyNode;
  2. use EasySwoole\Policy\Policy;
  3. //Authorized action
  4. //PolicyNode::EFFECT_ALLOW Allowed
  5. //PolicyNode::EFFECT_DENY Refused
  6. //PolicyNode::EFFECT_UNKNOWN Unknown
  7. $policy = new Policy();
  8. //Add node authorization
  9. $policy->addPath('/user/add',PolicyNode::EFFECT_ALLOW);
  10. $policy->addPath('/user/update',PolicyNode::EFFECT_ALLOW);
  11. $policy->addPath('/user/delete',PolicyNode::EFFECT_DENY);
  12. $policy->addPath('/user/*',PolicyNode::EFFECT_DENY);
  13. //Verify node permissions
  14. var_dump($policy->check('user/asdasd'));//deny
  15. var_dump($policy->check('user/add')); //allow
  16. var_dump($policy->check('user/update'));//allow
  17. /*
  18. * Allow /api/*, but only reject /api/order/charge, /api/order/info, /api/sys/*
  19. */
  20. $policy->addPath('/api/*',PolicyNode::EFFECT_ALLOW);
  21. $policy->addPath('/api/order/charge',PolicyNode::EFFECT_DENY);
  22. $policy->addPath('/api/order/info',PolicyNode::EFFECT_DENY);
  23. $policy->addPath('/api/sys/*',PolicyNode::EFFECT_DENY);
  24. var_dump($policy->check('/api/whatever'));
  25. var_dump($policy->check('/api/order/charge'));
  26. var_dump($policy->check('/api/order/info'));
  27. var_dump($policy->check('/api/sys/whatever'));
  28. //Object addition
  29. $root = new PolicyNode('*');
  30. $userChild = $root->addChild('user');
  31. $userAddChild = $userChild->addChild('add');
  32. $userAddChild->addChild('aaaaaa')->setAllow(PolicyNode::EFFECT_ALLOW);
  33. $userChild->addChild('update')->setAllow(PolicyNode::EFFECT_DENY);
  34. $userChild->addChild('*')->setAllow(PolicyNode::EFFECT_ALLOW);
  35. $apiChild = $root->addChild('charge');
  36. $apiChild->addChild('*');
  37. $node = $root->search('/user/add/aaaa');
  38. if ($node) {
  39. var_dump($node->isAllow());
  40. }