1. Go to this page and download the library: Download psecio/propauth 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/ */
psecio / propauth example snippets
Psecio\PropAuth\Enforcer;
use \Psecio\PropAuth\Policy;
$enforcer = new Enforcer();
$myUser = (object)[
'username' => 'ccornutt',
'permissions' => ['test1'],
'password' => password_hash('test1234', PASSWORD_DEFAULT)
];
$myPolicy = new Policy();
$myPolicy->hasUsername('ccornutt');
$result = $enforcer->evaluate($myUser, $myPolicy);
echo 'RESULT: '.var_export($result, true)."\n\n"; // result is true
// You can also chain the evaluations to make more complex policies
$myPolicy->hasUsername('ccornutt')->hasPermissions('test1'); // also true
// There's also a static method to help make the creation more concise
$myPolicy = Policy::instance()->hasUser('ccornutt')->hasPermissions('test1');
class User
{
public $permissions = [];
public $username = ['user1', 'user2'];
}
class Perm
{
public $name = '';
protected $value = '';
public $tests = [];
public function __construct($name, $value)
{
$this->name = $name;
$this->value = $value;
}
public function setTests(array $tests)
{
$this->tests = $tests;
}
public function getValue()
{
return $this->value;
}
}
class Test
{
public $title;
public $foo = [];
public function __construct($title)
{
$this->title = $title;
}
public function setFoos(array $foo)
{
$this->foo = $foo;
}
}
class Foo
{
public $test;
public function __construct($test)
{
$this->test = $test;
}
}
$policies = PolicySet::instance()
->add('test', Policy::instance()->find('permissions.tests.foo')->hasTest('t3'));
$policy = new Policy();
#### POSITIVE CHECKS
// Check to see if the permission is in a set
$user = new User([
'permissions' => ['test1', 'test2']
]);
$policy->hasPermissions('test1');
// Check to see if any permissions match
$policy->hasPermissions(['test3', 'test2', 'test5'], Policy::ANY);
// Check to see that the permissions match exactly
$policy->hasPermissions(['test1', 'test2'], Policy::ALL);
#### NEGATIVE CHECKS
// Check to see if the permission is NOT in the set
$policy->notPermissions('test5');
// Check to see if NONE of the permissions match
$policy->notPermissions(['test3', 'test5', 'test6'], Policy::ANY);
// Check to see if the permissions are NOT equal
$policy->notPermissions(['test4', 'test5'], Policy::ALL);
// Make a user
$myUser = (object)[
'username' => 'ccornutt',
'permissions' => ['test1']
];
// Make a post
$post = (object)[
'title' => 'This is a test post',
'id' => 1
];
$myPolicy = new Policy();
$myPolicy
->hasUsername(['ccornutt', 'ccornutt1'], Policy::ANY)
->can(function($subject, $post) {
return ($post->id === 1);
})
->cannot(function($subject, $post) {
return (strpos($post->title, 'foobar') === false);
});
$result = $enforcer->evaluate($myUser, $myPolicy, [ $post ]); // result is TRUE
$set = new PolicySet();
$set->add(
'edit-post',
Policy::instance()->hasUsername('testuser1')
);
// Or, using the instance method
$set = new PolicySet()
->add('edit-post', Policy::instance()->hasUsername('testuser1'));
$myUser = (object)[
'username' => 'testuser1',
'permissions' => ['test1']
];
$enforcer = new Enforcer($set);
if ($enforcer->allows('edit-post', $myUser) === true) {
echo 'Hey, you can edit the post - rock on!';
}
$myUser = (object)[
'username' => 'ccornutt',
'password' => password_hash('test1234', PASSWORD_DEFAULT)
];
$gate = new Gateway($myUser);
$subject = $gate->authenticate($password);
// Then we can check if the user is authenticated
echo 'Is authenticated? '.var_export($subject->isAuthed(), true)."\n";
$context = new Context([
'policies' => [
'policy1' => Policy::instance()->hasUsername('ccornutt')
]
]);
$gate = new Gateway($myUser, $context);
// When we can call the "evaluate" method with the policies we want to check:
if ($gate->evaluate('policy1') === true) {
echo 'Policy1 passes!';
}
// Or you can just add your own PolicySet instance and use "evaluate" the same way
$myPolicySet = new PolicySet()->add('edit-post', Policy::instance()->hasUsername('testuser1'));
$context = new Context([
'policies' => $myPolicySet
]);