Class **Phalcon\\Acl\\Adapter\\Memory**
=======================================

*extends* :doc:`Phalcon\\Acl <Phalcon_Acl>`

*implements* :doc:`Phalcon\\Events\\EventsAwareInterface <Phalcon_Events_EventsAwareInterface>`, :doc:`Phalcon\\Acl\\AdapterInterface <Phalcon_Acl_AdapterInterface>`

Manages ACL lists in memory  

.. code-block:: php

    <?php

    $acl = new Phalcon\Acl\Adapter\Memory();
    
    $acl->setDefaultAction(Phalcon\Acl::DENY);
    
    //Register roles
    $roles = array(
    	'users' => new Phalcon\Acl\Role('Users'),
    	'guests' => new Phalcon\Acl\Role('Guests')
    );
    foreach($roles as $role){
    	$acl->addRole($role);
    }
    
    //Private area resources
      $privateResources = array(
    	'companies' => array('index', 'search', 'new', 'edit', 'save', 'create', 'delete'),
    	'products' => array('index', 'search', 'new', 'edit', 'save', 'create', 'delete'),
    	'invoices' => array('index', 'profile')
    );
    foreach($privateResources as $resource => $actions){
    	$acl->addResource(new Phalcon\Acl\Resource($resource), $actions);
    }
    
    //Private area resources
    $publicResources = array(
    	'index' => array('index'),
    	'about' => array('index'),
    	'session' => array('index', 'register', 'start', 'end'),
    	'contact' => array('index', 'send')
    );
      foreach($publicResources as $resource => $actions){
    	$acl->addResource(new Phalcon\Acl\Resource($resource), $actions);
    }
    
      //Grant access to public areas to both users and guests
    foreach($roles as $role){
    	foreach($publicResources as $resource => $actions){
    		$acl->allow($role->getName(), $resource, '*');
    	}
    }
    
    //Grant acess to private area to role Users
      foreach($privateResources as $resource => $actions){
     		foreach($actions as $action){
    		$acl->allow('Users', $resource, $action);
    	}
    }



Constants
---------

*integer* **ALLOW**

*integer* **DENY**

Methods
---------

public  **__construct** ()

Phalcon\\Acl\\Adapter\\Memory constructor



public  **setDefaultAction** (*int* $defaultAccess)

Sets the default access level (Phalcon\\Acl::ALLOW or Phalcon\\Acl::DENY)



public *int*  **getDefaultAction** ()

Returns the default ACL access level



public *boolean*  **addRole** (:doc:`Phalcon\\Acl\\RoleInterface <Phalcon_Acl_RoleInterface>` $roleObject, *array* $accessInherits)

Adds a role to the ACL list. Second parameter lets to inherit access data from other existing role Example: 

.. code-block:: php

    <?php

     $acl->addRole(new Phalcon\Acl\Role('administrator'), 'consultant');
     $acl->addRole('administrator', 'consultant');




public  **addInherit** (*string* $roleName, *string* $roleToInherit)

Do a role inherit from another existing role



public *boolean*  **isRole** (*string* $roleName)

Check whether role exist in the roles list



public *boolean*  **isResource** (*string* $resourceName)

Check whether resource exist in the resources list



public *boolean*  **addResource** (:doc:`Phalcon\\Acl\\Resource <Phalcon_Acl_Resource>` $resource, *unknown* $accessList)

Adds a resource to the ACL list Access names can be a particular action, by example search, update, delete, etc or a list of them Example: 

.. code-block:: php

    <?php

     //Add a resource to the the list allowing access to an action
     $acl->addResource(new Phalcon\Acl\Resource('customers'), 'search');
     $acl->addResource('customers', 'search');
    
     //Add a resource  with an access list
     $acl->addResource(new Phalcon\Acl\Resource('customers'), array('create', 'search'));
     $acl->addResource('customers', array('create', 'search'));




public  **addResourceAccess** (*string* $resourceName, *mixed* $accessList)

Adds access to resources



public  **dropResourceAccess** (*string* $resourceName, *mixed* $accessList)

Removes an access from a resource



protected  **_allowOrDeny** ()

Checks if a role has access to a resource



public  **allow** (*string* $roleName, *string* $resourceName, *mixed* $access)

Allow access to a role on a resource You can use '*' as wildcard Example: 

.. code-block:: php

    <?php

     //Allow access to guests to search on customers
     $acl->allow('guests', 'customers', 'search');
    
     //Allow access to guests to search or create on customers
     $acl->allow('guests', 'customers', array('search', 'create'));
    
     //Allow access to any role to browse on products
     $acl->allow('*', 'products', 'browse');
    
     //Allow access to any role to browse on any resource
     $acl->allow('*', '*', 'browse');




public *boolean*  **deny** (*string* $roleName, *string* $resourceName, *mixed* $access)

Deny access to a role on a resource You can use '*' as wildcard Example: 

.. code-block:: php

    <?php

     //Deny access to guests to search on customers
     $acl->deny('guests', 'customers', 'search');
    
     //Deny access to guests to search or create on customers
     $acl->deny('guests', 'customers', array('search', 'create'));
    
     //Deny access to any role to browse on products
     $acl->deny('*', 'products', 'browse');
    
     //Deny access to any role to browse on any resource
     $acl->deny('*', '*', 'browse');




public *boolean*  **isAllowed** (*string* $role, *string* $resource, *unknown* $access)

Check whether a role is allowed to access an action from a resource 

.. code-block:: php

    <?php

     //Does andres have access to the customers resource to create?
     $acl->isAllowed('andres', 'Products', 'create');
    
     //Do guests have access to any resource to edit?
     $acl->isAllowed('guests', '*', 'edit');




public *string*  **getActiveRole** ()

Returns the role which the list is checking if it's allowed to certain resource/access



public *string*  **getActiveResource** ()

Returns the resource which the list is checking if some role can access it



public *string*  **getActiveAccess** ()

Returns the access which the list is checking if some role can access it



protected  **_rebuildAccessList** ()

Rebuild the list of access from the inherit lists



public  **setEventsManager** (*unknown* $eventsManager) inherited from Phalcon\\Acl

Sets the events manager



public :doc:`Phalcon\\Events\\ManagerInterface <Phalcon_Events_ManagerInterface>`  **getEventsManager** () inherited from Phalcon\\Acl

Returns the internal event manager