protected function addAclRole($rola, $prefix = null) { // debug($prefix); if (count($rola['parents']) && (isset($rola['parents']['role']) && count($rola['parents']['role']) || isset($rola['parents']['group']) && count($rola['parents']['group']))) { $parentsArray = array(); foreach ($rola['parents'] as $parent_prefix => $prefixes) { if (count($prefixes)) { foreach ($prefixes as $parent) { $parentsArray[] = ($parent_prefix ? $parent_prefix . '_' : '') . (int) $parent['priority'] . "_" . $parent['id']; if (!$this->acl->hasRole(($parent_prefix ? $parent_prefix . '_' : '') . ($parent_prefix != 'profile' ? (int) $parent['priority'] . "_" : '') . (string) $parent['id'])) { $source = '_' . $parent_prefix . 's'; $source = $this->{$source}; if (isset($source[$parent['id']])) { $this->addAclRole($source[$parent['id']], $parent_prefix); } } } } } if (!$this->acl->hasRole(($prefix ? $prefix . '_' : '') . ($prefix != 'profile' ? (int) $rola['priority'] . "_" : '') . (string) $rola['id'])) { $this->acl->addRole(($prefix ? $prefix . '_' : '') . ($prefix != 'profile' ? (int) $rola['priority'] . "_" : '') . $rola['id'], $parentsArray); } } else { if (!$this->acl->hasRole(($prefix ? $prefix . '_' : '') . ($prefix != 'profile' ? (int) $rola['priority'] . "_" : '') . (string) $rola['id'])) { $this->acl->addRole(($prefix ? $prefix . '_' : '') . ($prefix != 'profile' ? (int) $rola['priority'] . "_" : '') . $rola['id']); } } }