web-dev-qa-db-fra.com

Comment enregistrer et comprendre correctement les règles ACL lors de la création de catégories à partir de PHP

Nous faisons une importation massive de catégories à partir d'un autre CMS, et utilisons le code ci-dessous pour créer les catégories:

$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;

Tout cela fonctionne à merveille, en créant la catégorie, avec les autorisations comme prévu.

Cependant, en examinant d’autres catégories ajoutées manuellement en cours de route, toutes avec la même ascendance parent_id, je vois deux variétés différentes de la colonne rules dans la colonne #__assets table.

#__ assets rules Exemple # 1 ( tel que créé par le code ci-dessus, et certains avec Admin Category Manager, utilisé par plusieurs catégories )

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

#__ assets rules Exemple # 2 ( créé par le gestionnaire de catégories de l'administrateur et utilisé par de nombreuses catégories )

{
    "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}
}

Lorsque je les visualise dans le gestionnaire de catégories, les deux catégories apparaissent comme disposant des mêmes autorisations. Tout ce qui est hérité, à l'exception de "Edit Own", défini sur "Autorisé". La vraie question est donc double:

  1. Quelles sont les différences entre ces deux ensembles de règles
  2. La méthode que nous utilisons (exemple 1) est-elle incomplète?
6
GDP

La colonne de règles de la table des actifs définit les règles personnalisées pour chaque élément individuellement.

La valeur par défaut du champ serait:

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

Ce qui signifie que toutes les règles d'autorisation pour cet élément héritent de leurs autorisations des paramètres de configuration globale par défaut spécifiés pour chaque groupe.

Sinon, il y a des permissions écrasées par item:

{"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}}

Explication de la quelle valeur de core.create":{"6":1,"3":0} veux dire:

Pour cet élément, les autorisations ID de groupe 6 ont les autorisations Créer définies sur "Autorisé" (1), tandis que les ID de groupe a les autorisations Créer définies sur "Refusé" (0). (Ces autorisations remplacent les autorisations globales par défaut et toutes les autres autorisations des groupes rest sont héritées.)

J'espère que cela t'aides...

2
FFrewin