it-swarm.com.de

Begrenzen Sie die Erstellung des Artikel-Frontends nach Benutzergruppen

Ich bin ein bisschen verwirrt, wo ich anfangen soll.

Das sollte passieren:

  1. administratoren sollten in der Lage sein, eine Benutzergruppe zu bearbeiten und die Anzahl der Artikel zu definieren, die Mitglieder dieser Gruppe erstellen können.
  2. Bevor ein Gruppenmitglied einen neuen Artikel in fronted erstellt/speichert, wird die Anzahl der von diesem Benutzer erstellten Artikel mit den maximal zulässigen Artikeln seiner Gruppenmitgliedschaft verglichen. Pseudocode:

    if ($articlesCreatedByUser < $allowedArticlesByGroup){
      $article->save();
    } else {
      die('you reached the article limit');
    

Da ich gerade mit der Joomla-Entwicklung anfange, hier meine Fragen.

  • mit Joomla3 ist es einfach, ganzzahlige Zusatzfelder für Benutzer zu erstellen. Ist dies auch mit Benutzergruppen möglich? Wenn nicht, was würde benötigt, um das Benutzergruppen-Backend-Formular zu erweitern?
  • was ist der einfachste Weg, um das Formular zur Artikelerstellung wie oben beschrieben einzuschränken? Ich bin mir nicht sicher, ob ich in die Plugin-Erstellung eintauchen soll (und mich vorher einbinden soll) oder um com_content und seine Methode zum Speichern von Modellen zu erweitern.

Vielen Dank!

Toni

enter image description here

1
t Book

Ich würde vorschlagen, ein Inhalts-Plugin zusammen mit einer Vorlagenüberschreibung zu entwickeln, um diese Aufgabe zu erledigen. Das folgende Beispiel beschränkt maximal 5 Artikel pro Tag und Benutzer.

public function onContentBeforeSave($context, $article, $isNew)
{
    if ( $context != 'com_content.form' || !$isNew) 
    {
        return true;
    }

    $user = JFactory::getUser();
    $db = JFactory::getDbo();

    $query = $db->getQuery(true)
        ->select('count(*)')
        ->from('#__content')
        ->where('created_by = '.$user->id.' and created > CURDATE()');
    $db->setQuery($query);
    $articlesCreatedByUser = (int)$db->loadResult();

    // get the allowed articles somehow..
    $allowedArticlesByGroup = 5;

    // check the allowed articles.
    if ($articlesCreatedByUser >= $allowedArticlesByGroup)
    {
        $article->setError('Maximum of '.$allowedArticlesByGroup.' articles are allowed per day.');
        return false;
    }

    return true;
}

Das Plugin verhindert, dass Benutzer neue Artikel erstellen, die über das erlaubte Limit hinausgehen. Um nun zu verhindern, dass Benutzer auf die Seite zum Erstellen von Artikeln selbst zugreifen, überschreiben Sie das Formularlayout und fügen Sie die obige Logik hinzu.

1
Nagarjun