This example contains about How Acl Keys (Roles
, Resources
, Rights
) relate in Zend Framework 2,
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';
}
By the way, you can find other examples using Zend Framework 2 in our home page :)