donate Buy us a cup of coffee
Our service is free. But your donation can help us keep running. To rent a server and domain, to buy us a cup of coffee, to reduce our activity in paid stuff and make this service better. You can send us a donation to BCA Bank, 008 090 8440 in the name of Abdul Malik Ikhsan with Swifcode CENAIDJA. Please confirm to samsonasik@gmail.com after that ;).
download Download module      



Zend\Permissions\Acl demo

This example contains about How Acl Keys (Roles, Resources, Rights) relate in Zend Framework 2,

We are demoing sample like the following diagram :
There are 3 keys in Acl :
  1. Roles
  2. Resources
  3. Rights/Permissions
Roles can be defined by :
    
use Zend\Permissions\Acl\Acl as BaseAcl;
use Zend\Permissions\Acl\Role\GenericRole as Role;
use Zend\Permissions\Acl\Resource\GenericResource as Resource;

class YourAclModel extends BaseAcl
{
    public function __construct()
    {
        $this->addRole(new Role('Guest'));
        $this->addRole(new Role('User'),  'Guest');
        $this->addRole(new Role('Admin'), 'User');
    }
}
    
Resources can be defined by :
    
class YourAclModel extends BaseAcl
{
    public function __construct()
    {
        // ...
        $this->addResource(new Resource('HomeController'));
        $this->addResource(new Resource('UserController'));
        $this->addResource(new Resource('AdminController'));
    }
}
    
Rights can be difined by :
    
class YourAclModel extends BaseAcl
{
    public function __construct()
    {
        // ...
        $this->allow('Guest', 'HomeController', 'ViewHome');
        $this->allow('Guest', 'UserController', ['ViewUser', 'RegisterUser']);

        $this->allow('User', 'HomeController', 'ViewHome');
        $this->allow('User', 'UserController', ['ViewUser', 'EditUser']);
        $this->deny('User', 'UserController', 'RegisterUser');

        $this->allow('Admin', 'AdminController', ['DeleteUser', 'AddUser']);
    }
}
    
When we extends other Role, his/her Right(s) for Resource(s) will be extended too, so for example, Guest can ViewHome, ofcourse User can ViewHome too, except we override it, for example, if we are already a User, we can't RegisterUser. We can check if a Role has access of resource by
    
$acl = new YourAclModel();
if ($acl->isAllowed('Admin', 'AdminController','EditUser')) {
    echo 'allowed to edit user';
}
    

That's it ;), Hope it's helpful!

By the way, you can find other examples using Zend Framework 2 in our home page :)