it-swarm.com.de

Wie kann ich PHP) verwenden, um einer Kernkomponente ACL-Regeln einer benutzerdefinierten Benutzergruppe hinzuzufügen?

Unsere Komponente verfügt über eine benutzerdefinierte Benutzergruppe, die bei der Installation mit UsersModelGroup erstellt wird. Wir müssen add spezifische Berechtigungen für com_content für diese Benutzergruppe, ohne die möglicherweise bereits vorhandenen Berechtigungen für die Komponente zu beeinflussen.

Ich bin mit dem Erstellen eines vollständigen Regelsatzes für einen Artikel oder eine Kategorie beim Erstellen des Inhalts vertraut und kann für diese Aufgabe den Asset-Datensatz lesen und dann die Array-Manipulation verwenden, um meine Regel hinzuzufügen, aber das scheint etwas brachial zu sein. Gibt es einen besseren Weg, dies zu tun?

Aktuelle ACL-Regeln für com_content:

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

Wenn ich "123" als benutzerdefinierte Benutzergruppe verwende, muss dieser Regelsatz vorhanden sein:

"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 Erwartung einer eleganteren Lösung ist hier mein etwas neandertaler Ansatz, der funktioniert:

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

Entschuldigung, aber ich habe keine Möglichkeit, eine andere Antwort zu posten. Wenn ich Sie richtig verstehe, installieren Sie Ihre eigene Komponente und möchten com_content um eine weitere Option erweitern. Kannst du nicht einfach benutzen?

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

aber wie gesagt, neu bei joomla/php sollte ich nicht versuchen irgendwas zu beantworten.

3
Andreas