it-swarm-es.tech

Cómo guardar y comprender correctamente las reglas de ACL al crear categorías desde PHP

Estamos haciendo una importación masiva de categorías de otro CMS, y usando el siguiente código para crear las categorías:

$basePath = JPATH_ADMINISTRATOR.'/components/com_categories';
require_once $basePath.'/models/category.php';
$config  = array('table_path' => $basePath.'/tables');
$catmodel = new CategoriesModelCategory($config);
// Populate the params array with values to save, for rules:
$params['rules'] = array(
    'core.edit.state' => array(),
    'core.edit.delete' => array(),
    'core.edit.edit' => array(),
    'core.edit.state' => array(),
    'core.edit.edit.own' => array(1=>true)
);
if(!$catmodel->save($params))
    return false;

Todo esto funciona de maravilla, creando la categoría, con los permisos como se esperaba.

Sin embargo, al examinar otras categorías que se han agregado manualmente en el camino, todas con la misma ascendencia parent_id, veo dos variedades diferentes de la columna rules en la #__assets mesa.

#__ reglas de activos Ejemplo # 1 ( según lo creado por el código anterior, y algunos con Admin Category Manager, en uso por muchas categorías )

{
    "core.create":[],
    "core.delete":[],
    "core.edit":[],
    "core.edit.state":[],
    "core.edit.own":{"1":1}
}

#__ reglas de activos Ejemplo # 2 ( según lo creado por el Administrador de categorías de administrador, y en uso por muchas categorías )

{
    "core.create":{"6":1,"3":1},
    "core.delete":{"6":1},
    "core.edit":{"6":1,"4":1},
    "core.edit.state":{"6":1,"5":1},
    "core.edit.own":{"1":1,"6":1,"3":1}
}

Cuando los veo en el Administrador de categorías, ambas categorías parecen tener los mismos permisos, heredando todo excepto "Editar propio" que se establece en "Permitido". Entonces, la verdadera pregunta es doble:

  1. ¿Cuáles son las diferencias entre estos dos conjuntos de reglas?
  2. ¿El método que estamos usando (dando el ejemplo # 1) está incompleto de todos modos?
6
GDP

La columna de reglas en la tabla de activos define las reglas personalizadas para cada elemento individualmente.

El valor predeterminado del campo sería:

{"core.create":[],"core.delete":[],"core.edit":[],"core.edit.state":[],"core.edit.own":[]}

Lo que significa que todas las reglas de permisos para este elemento heredan sus permisos de la configuración de configuración global predeterminada como se especifica para cada grupo.

De lo contrario, hay anulaciones de permisos por elemento:

{"core.create":{"6":1,"3":1},"core.delete":{"6":1},"core.edit":{"6":1,"4":1},"core.edit.state":{"6":1,"5":1},"core.edit.own":{"6":1,"3":1}}

Explicación de lo que un valor de core.create":{"6":1,"3":0} significa:

Para este elemento, el ID de grupo 6 tiene Crear permisos establecidos en "Permitido" (1), mientras que el ID de grupo tiene Crear permisos establecidos en "Denegado" (0). (Estos permisos anulan los permisos globales predeterminados, y todos los demás permisos para los demás grupos se heredan).

Espero que esto ayude...

2
FFrewin