web-dev-qa-db-fra.com

Comment utiliser PHP pour ajouter les règles ACL d'un groupe d'utilisateurs personnalisé à un composant principal?

Notre composant a un groupe d'utilisateurs personnalisé créé lors de l'installation avec UsersModelGroup. Nous devons ajouter des autorisations spécifiques à com_content pour ce groupe d'utilisateurs sans affecter les autorisations existantes pour le composant.

Je suis habitué à créer un ensemble complet de règles pour un article ou une catégorie lors de la création du contenu. Pour cette tâche, je peux lire l'enregistrement d'actif, puis utiliser la manipulation de tableau pour ajouter ma règle, mais cela semble un peu brutal. Y a-t-il une meilleure façon de faire cela?

Règles ACL com_content actuelles:

"core.admin":{"7":1},
"core.manage":{"6":1},
"core.create":{"3":1},
"core.delete":[],
"core.edit":{"4":1},
"core.edit.state":{"5":1},
"core.edit.own":[]

En utilisant "123" comme groupe d'utilisateurs personnalisé, j'ai besoin de cet ensemble de règles pour être en place:

"core.admin":{"7":1},
"core.manage":{"6":1},
"core.create":{"3":1},
"core.delete":["123":0],
"core.edit":{"4":1,"123":1},
"core.edit.state":{"5":1},
"core.edit.own":[]
3
GDP

En attendant une solution plus élégante, voici mon approche un peu néandertalienne qui fonctionne:

// Get the Asset record for com_content 
// I'm not assuming that the row id will be the same in every Joomla installation
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->select('id, rules')->from($db->quoteName('#__assets'))
->where($db->quoteName('name') .'='.$db->quote('com_content'));
$db->setQuery($query);
$asset = $db->loadObject();

$rules = new JRegistry();           // Create a new Joomla Registry
$rules->loadString($asset->rules);  // Load the Current ACL rules into the Registry
$rule_array = $rules->toArray();    // Convert to Array for easy manipulation

// Set the ACL rules for Custom Usergroup 123
$rule_array['core.delete'][123] = 0;    // My custom usergroup cannot delete Content
$rule_array['core.edit'][123] = 1;      // My custom usergroup can edit Content

// Re-load the Rules registry with the modified rules array for saving
$rules->loadArray($rule_array);         
JTable::addIncludePath(JPATH_ADMINISTRATOR.'/libraries/joomla/table');
$row = JTable::getInstance('Asset');
$row->load($asset->id);
$row->rules = $rules->__toString(); // Save as string
$row->store();
3
GDP

Désolé, je n'ai pas d'autre choix que de poster une autre réponse. Si je vous ai bien compris, vous installez votre propre composant et souhaitez ajouter une autre option à com_content. Donc, vous ne pouvez pas simplement utiliser

<access component="com_content">...</>

mais comme je l'ai dit, Nouveau sur Joomla/php, je ne devrais pas essayer de répondre à rien.

3
Andreas