1. Go to this page and download the library: Download popphp/pop-acl 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/ */
popphp / pop-acl example snippets
use Pop\Acl\Acl;
use Pop\Acl\AclRole as Role;
use Pop\Acl\AclResource as Resource;
$acl = new Acl();
$admin = new Role('admin');
$editor = new Role('editor');
$reader = new Role('reader');
$page = new Resource('page');
$acl->addRoles([$admin, $editor, $reader]);
$acl->addResource($page);
$acl->allow('admin', 'page') // Admin can do anything to a page
->allow('editor', 'page', 'edit') // Editor can only edit a page
->allow('reader', 'page', 'read'); // Reader can only read a page
$acl->setStrict(); // Deny anything without an explicit allow rule. See [Strict](#strict).
var_dump($acl->isAllowed($admin, $page, 'add')); // true
var_dump($acl->isAllowed($editor, $page, 'edit')); // true
var_dump($acl->isAllowed($editor, $page, 'add')); // false
var_dump($acl->isAllowed($reader, $page, 'edit')); // false
var_dump($acl->isAllowed($reader, $page, 'read')); // true
$acl = new Acl($admin, $editor, $reader, $page);
// or
$acl = new Acl([$admin, $editor, $reader], $page);
use Pop\Acl\AclRole as Role;
$admin = new Role('admin');
$admin->id = 1; // Define the role ID
$admin->user_id = 2; // Define the current user ID
use Pop\Acl\AclResource as Resource;
$page = new Resource('page');
$page->id = 1; // Define the role ID
$page->user_id = 2; // Define the page owner user ID
use Pop\Acl\Acl;
use Pop\Acl\AclRole as Role;
use Pop\Acl\AclResource as Resource;
$acl = new Acl();
$admin = new Role('admin');
$editor = new Role('editor');
$page = new Resource('page');
$acl->addRoles([$admin, $editor]);
$acl->addResource($page);
$acl->allow($admin, $page) // Admin can do anything to a page
->allow($editor, $page, 'edit'); // Editor can edit a page
var_dump($acl->isAllowed($admin, $page, 'add')); // bool(true)
var_dump($acl->isAllowed($editor, $page, 'add')); // bool(true)
use Pop\Acl\Acl;
use Pop\Acl\AclRole as Role;
use Pop\Acl\AclResource as Resource;
$acl = new Acl();
$admin = new Role('admin');
$editor = new Role('editor');
$page = new Resource('page');
$acl->addRoles([$admin, $editor]);
$acl->addResource($page);
$acl->allow($admin, $page) // Admin can do anything to a page
->allow($editor, $page, 'edit'); // Editor can edit a page
$acl->deny($editor, $page, 'add');
var_dump($acl->isAllowed($admin, $page, 'add')); // bool(true)
var_dump($acl->isAllowed($editor, $page, 'add')); // bool(false)
use Pop\Acl\Acl;
use Pop\Acl\AclRole as Role;
use Pop\Acl\AclResource as Resource;
$acl = new Acl();
$acl->setStrict();
$admin = new Role('admin');
$editor = new Role('editor');
$page = new Resource('page');
$acl->addRoles([$admin, $editor]);
$acl->addResource($page);
$acl->allow($admin, $page) // Admin can do anything to a page
->allow($editor, $page, 'edit'); // Editor can edit a page
var_dump($acl->isAllowed($admin, $page, 'add')); // bool(true)
var_dump($acl->isAllowed($editor, $page, 'add')); // bool(false)
use Pop\Acl\Acl;
use Pop\Acl\AclRole as Role;
use Pop\Acl\AclResource as Resource;
$acl = new Acl();
$admin = new Role('admin');
$editor = new Role('editor');
$page = new Resource('page');
$acl->addRoles([$admin, $editor])
->addResource($page);
$acl->allow('admin', 'page') // Admin can do anything to a page
->allow('editor', 'page', 'edit') // Editor can only edit a page
use Pop\Acl\Acl;
use Pop\Acl\AclRole as Role;
use Pop\Acl\AclResource as Resource;
$acl = new Acl();
$admin = new Role('admin');
$editor = new Role('editor');
$page = new Resource('page');
$acl->addRoles([$admin, $editor])
->addResource($page);
$acl->deny('admin', 'page', 'add')
->deny('editor', 'page', 'edit');
var_dump($acl->isDeniedMulti([$admin, $editor], $page, 'add')); // true, admin is denied
var_dump($acl->isDeniedMulti([$admin, $editor], $page, 'read')); // false, neither is denied
var_dump($acl->isDeniedMultiStrict([$admin, $editor], $page, 'add')); // false, editor isn't denied 'add'
use Pop\Acl\Acl;
use Pop\Acl\AclRole as Role;
use Pop\Acl\AclResource as Resource;
$acl = new Acl();
$editor = new Role('editor');
$reader = new Role('reader');
// Add the $reader role as a child role of $editor.
// The role $reader will now inherit the access rules
// of the role $editor, unless explicitly overridden.
$editor->addChild($reader);
// Equivalent to the above, from the other direction:
// $reader->setParent($editor);
$page = new Resource('page');
$acl->addRoles([$editor, $reader]);
$acl->addResource($page);
// Neither the editor or reader can add a page
$acl->deny('editor', 'page', 'add');
// The editor can edit a page
$acl->allow('editor', 'page', 'edit');
// Both the editor or reader can read a page
$acl->allow('editor', 'page', 'read');
// Over-riding deny rule so that a reader cannot edit a page
$acl->deny('reader', 'page', 'edit');
var_dump($acl->isAllowed('editor', 'page', 'add')); // false
var_dump($acl->isAllowed('reader', 'page', 'add')); // false
var_dump($acl->isAllowed('editor', 'page', 'edit')); // true
var_dump($acl->isAllowed('reader', 'page', 'edit')); // false
var_dump($acl->isAllowed('editor', 'page', 'read')); // true
var_dump($acl->isAllowed('reader', 'page', 'read')); // true
use Pop\Acl\Acl;
use Pop\Acl\AclRole as Role;
use Pop\Acl\AclResource as Resource;
$acl = new Acl();
$acl->setStrict();
$editor = new Role('editor');
$reader = new Role('reader');
$editor->addChild($reader);
$page = new Resource('page');
$acl->addRoles([$editor, $reader]);
$acl->addResource($page);
$acl->allow($editor, $page, 'edit'); // editor (the parent) can edit
// Default parent-strict is false: reader inherits *any* explicit rule from
// editor, regardless of which specific permission was requested
var_dump($acl->isAllowed($reader, $page, 'delete')); // bool(true)
$acl->setParentStrict();
// With parent-strict enabled, an inherited rule must match the exact
// permission requested
var_dump($acl->isAllowed($reader, $page, 'delete')); // bool(false)
var_dump($acl->isAllowed($reader, $page, 'edit')); // bool(true)
use Pop\Acl\Acl;
use Pop\Acl\AclRole as Role;
use Pop\Acl\AclResource as Resource;
$acl = new Acl();
$editor = new Role('editor');
$page = new Resource('page');
$post = new Resource('post');
$acl->addRole($editor);
$acl->addResources([$page, $post]);
$acl->setStrict();
$acl->allow($editor, $page, ['edit', 'delete']);
$acl->allow($editor, $post, 'edit');
// Revoke just one permission on one resource
$acl->removeAllowRule($editor, $page, 'delete');
var_dump($acl->isAllowed($editor, $page, 'edit')); // bool(true)
var_dump($acl->isAllowed($editor, $page, 'delete')); // bool(false)
// Revoke every permission on one resource
$acl->removeAllowRule($editor, $page);
var_dump($acl->isAllowed($editor, $page, 'edit')); // bool(false)
var_dump($acl->isAllowed($editor, $post, 'edit')); // bool(true), unaffected
// Revoke every rule for the role entirely
$acl->removeAllowRule($editor);
var_dump($acl->isAllowed($editor, $post, 'edit')); // bool(false)
use Pop\Acl\Acl;
use Pop\Acl\AclRole as Role;
use Pop\Acl\AclResource as Resource;
$acl = new Acl();
$admin = new Role('admin');
$page = new Resource('page');
$acl->addRole($admin);
$acl->addResource($page);
$acl->allow($admin, $page, 'edit');
$acl->removeRole($admin);
$acl->removeResource($page);
var_dump($acl->hasRole('admin')); // bool(false)
var_dump($acl->hasResource('page')); // bool(false)
var_dump($acl->hasRoles()); // bool(false), no roles registered at all
var_dump($acl->hasResources()); // bool(false), no resources registered at all
use Pop\Acl\Acl;
use Pop\Acl\AclRole as Role;
use Pop\Acl\AclResource as Resource;
$acl = new Acl();
$admin = new Role('admin');
$page = new Resource('page');
$acl->addRole($admin);
$acl->addResource($page);
$acl->allow($admin, $page, '*') // Admin can do anything to a page...
->deny($admin, $page, 'delete'); // ...except delete it
var_dump($acl->isAllowed($admin, $page, 'edit')); // bool(true)
var_dump($acl->isAllowed($admin, $page, 'delete')); // bool(false)
var_dump($acl->isAllowed($admin, $page, '*')); // bool(true), because '*' itself is not denied (only 'delete' is)
use Pop\Acl\Acl;
use Pop\Acl\AclRole as Role;
use Pop\Acl\AclResource as Resource;
$acl = new Acl();
$editor = new Role('editor');
$reader = new Role('reader');
$page = new Resource('page');
$editor->addChild($reader);
$acl->addRole($editor);
$acl->addResource($page);
$acl->allow($editor, $page, 'read');
$acl->allow($reader, $page, 'comment');
print_r($acl->getAllowedPermissions($reader, $page)); // ['read', 'comment'] (order not guaranteed)
use Pop\Acl\Acl;
use Pop\Acl\AclRole;
use Pop\Acl\AclResource;
use Pop\Acl\Assertion\AssertionInterface;
class UserCanEditPage implements AssertionInterface
{
public function assert(
Acl $acl, AclRole $role,
?AclResource $resource = null,
mixed $permission = null
): bool
{
// Check that the resource owner (user_id) is the same as the current role user (user_id)
return ((null !== $resource) && ($resource->user_id == $role->user_id));
}
}
use Pop\Acl\Acl;
use Pop\Acl\AclRole as Role;
use Pop\Acl\AclResource as Resource;
$acl = new Acl();
$admin = new Role('admin');
$editor = new Role('editor');
$page = new Resource('page');
$admin->id = 1001;
$editor->id = 1002;
$page->user_id = 1001;
$acl->addRoles([$admin, $editor]);
$acl->addResource($page);
// Define the assertion(s) to use in the 4th parameter of the allow/deny method
$acl->allow('admin', 'page', 'add')
->allow('admin', 'page', 'edit', new UserCanEditPage())
->allow('editor', 'page', 'edit', new UserCanEditPage())
// Returns true because the assertion passes,
// the admin's ID matches the page's user ID
if ($acl->isAllowed('admin', 'page', 'edit')) { }
// Although editors can edit pages, this returns false
// because the assertion fails, as this editor's ID
// does not match the page's user ID
if ($acl->isAllowed('editor', 'page', 'edit')) { }
use Pop\Acl\Acl;
use Pop\Acl\AclRole;
use Pop\Acl\AclResource;
class User extends AclRole
{
use Pop\Acl\Policy\PolicyTrait;
public function __construct($name, $id, $isAdmin)
{
parent::__construct($name, ['id' => $id, 'isAdmin' => $isAdmin]);
}
public function create(User $user, AclResource $page)
{
return (($user->isAdmin) && ($page->getName() == 'page'));
}
public function update(User $user, AclResource $page)
{
return ($user->id === $page->user_id);
}
public function delete(User $user, AclResource $page)
{
return (($user->isAdmin) || ($user->id === $page->user_id));
}
}
// Returns true, because the user is an admin
var_dump($acl->isAllowed('admin', 'page', 'create'));
// Returns false, because the user is an editor (not an admin)
var_dump($acl->isAllowed('editor', 'page', 'create'));
// Returns false, because the admin doesn't "own" the page
var_dump($acl->isAllowed('admin', 'page', 'update'));
// Returns true, because the editor does "own" the page
var_dump($acl->isAllowed('editor', 'page', 'update'));
// Returns true, because the user is an admin
var_dump($acl->evaluatePolicy('create', 'admin', 'page'));
// Returns false, because the user is an editor (not an admin)
var_dump($acl->evaluatePolicy('create', 'editor', 'page'));
// Returns false, because the admin doesn't "own" the page
var_dump($acl->evaluatePolicy('update', 'admin', 'page'));
// Returns true, because the editor does "own" the page
var_dump($acl->evaluatePolicy('update', 'editor', 'page'));
var_dump($admin->can('create', $page)); // true, because the user is an admin
var_dump($editor->can('create', $page)); // false, because the user is an editor (not an admin)
var_dump($admin->can('update', $page)); // false, because the admin doesn't "own" the page
var_dump($editor->can('update', $page)); // true, because the editor does "own" the page
// false: create() passes (admin), but update() fails (admin doesn't "own" the page)
var_dump($admin->can('create,update', $page));
// false: create() fails immediately (not an admin) -- update() is never even evaluated
var_dump($editor->can('create,update', $page));
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.