it-swarm.dev

Come posso usare PHP per aggiungere le regole ACL di un gruppo utenti personalizzato a un componente principale?

Il nostro componente ha un gruppo utenti personalizzato che viene creato durante l'installazione con UsersModelGroup. Dobbiamo aggiungere autorizzazioni specifiche per com_content per quel gruppo di utenti senza applicare le autorizzazioni già esistenti per il componente.

Ho familiarità con la creazione di un set completo di regole per un articolo o una categoria durante la creazione del contenuto e, per questa attività, potrei leggere il record degli asset, quindi utilizzare la manipolazione dell'array per aggiungere la mia regola, ma sembra un po 'bruta. C'è un modo migliore per farlo?

Regole ACL com_content correnti:

"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":[]

Utilizzando "123" come gruppo di utenti personalizzato, ho bisogno che questo set di regole sia attivo:

"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

In attesa di una soluzione più elegante, ecco il mio approccio un po 'neanderthal che funziona:

// 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

Siamo spiacenti, ma non ho altra possibilità di pubblicare un'altra risposta. Se ti capisco correttamente, installi il tuo componente e vuoi aggiungere un'altra opzione a com_content. Quindi non puoi semplicemente usare

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

ma come ho detto, nuovo su Joomla/php non dovrei provare a rispondere a nulla.

3
Andreas