public static function translate($perm)
{
$perm = (string) $perm;
// apply filters
foreach (self::$filters as $search => $replace) {
$perm = str_replace($search, $replace, $perm);
}
// find plugins
$perm_ary = explode('_', $perm);
if (sizeof($perm_ary) == 3) {
$perm_ary = array_map('ucfirst', $perm_ary);
$resource = $perm_ary[0] . '-' . $perm_ary[1];
$action = $perm_ary[2];
return self::format($resource, $action);
}
// find known resource
foreach (self::$resources as $resource) {
if (strpos($perm, $resource) !== FALSE) {
$action = str_replace($resource, '', $perm);
return self::format($resource, $action);
}
}
// find known action
foreach (self::$actions as $action) {
if (strpos($perm, $action) !== FALSE) {
$resource = str_replace($action, '', $perm);
if (isset(self::$rename[$resource])) {
$resource = self::$rename[$resource];
}
return self::format($resource, $action);
}
}
throw new \InvalidArgumentException("'{$perm}' can't be translated");
}
/** * Get dynamic resources * * @return array */ public function getResources() { $em = $this->doctrine->getManager(); $permissions = $em->getRepository('Newscoop\\Entity\\Acl\\Permission')->createQueryBuilder('p')->select('p.name')->getQuery()->getArrayResult(); $resources = array(); foreach ($permissions as $permission) { try { list($resource, $action) = PermissionToAcl::translate($permission['name']); } catch (\InvalidArgumentException $e) { // ignore obsolete permissions continue; } if (!isset($resources[$resource])) { $resources[$resource] = array(); } $resources[$resource][] = $action; } return $resources; }