protected function insertOrUpdateAccess($roleName, $resourceName, $accessName, $action)
{
/**
* Check if the access is valid in the resource
*/
$exists = $this->getCollection('resourcesAccesses')->count(['resources_name' => $resourceName, 'access_name' => $accessName]);
if (!$exists) {
throw new Exception("Access '" . $accessName . "' does not exist in resource '" . $resourceName . "' in ACL");
}
$accessList = $this->getCollection('accessList');
$access = $accessList->findOne(['roles_name' => $roleName, 'resources_name' => $resourceName, 'access_name' => $accessName]);
if (!$access) {
$accessList->insert(['roles_name' => $roleName, 'resources_name' => $resourceName, 'access_name' => $accessName, 'allowed' => $action]);
} else {
$access['allowed'] = $action;
$accessList->save($access);
}
/**
* Update the access '*' in access_list
*/
$exists = $accessList->count(['roles_name' => $roleName, 'resources_name' => $resourceName, 'access_name' => '*']);
if (!$exists) {
$accessList->insert(['roles_name' => $roleName, 'resources_name' => $resourceName, 'access_name' => '*', 'allowed' => $this->_defaultAccess]);
}
return true;
}