Form Parameter updaten

  • Hallo,

    habe gerade das Problem das ein Eintrag nur dann bearbeitet werden darf wenn der Eintrag vom Ersteller erstellt wurde. Jetzt ist es so das der Wert nachträglich in der create Methode erst beigefügt wird. Jetzt bin ich mir nicht sicher ob dieser Wert auch in der update Methode existiert.

    Als Beispiel

    Meine Idee wäre jetzt das so umzusetzen:

    Wäre das so Problemlos möglich?

  • Hey,

    also ich empfehle folgendes:

    nutze in deiner DBO-Action-Klasse die validateUpdate()-Funktion der AbstractDBOAction (https://github.com/WoltLab/WCF/bl….class.php#L329) etwa so:

    PHP
    public function validateUpdate()
        {
    parent::validateUpdate();
    
            if (!isset($this->parameters['data']['userID']) || $this->parameters['data']['userID'] != WCF::getUser()->userID) {
            throw new PermissionDeniedException();
    }
        }

    Die update()-Funktion brauchst du dann nur fürs Updaten, nicht für die Prüfung.

    Ob das der beste Weg ist, kann ich dir nicht sagen. Aber sollte passen ;)

    Managed Webhosting, hochwertige Plugins und individuelle Auftragsarbeiten:

    Julian-Pfeil.de

  • Hab es damit mal probiert wie du sagest aber macht leider keinen Unterschied. Müsste ich da nicht vom aktuellen Objekt, welches bearbeitet wird, da die userID auslesen und dann vergleichen. Wäre jetzt ein Gedanke der mir kam. Wobei ich mir dann nicht bin wie ich das Umsetzen würde.

    Edited once, last by xerox8521 (December 31, 2022 at 3:03 AM).

  • Nicht schlimm ^^ . Problem besteht leider weiterhin

    PHP
    public function validateUpdate()
    {
        foreach($this->getObjects() as $objectEditor)
        {
            if($objectEditor->userID != WCF::getUser()->userID)
                throw new PermissionDeniedException();
        }
        parent::validateUpdate();
    }
  • Das Problem das UserID 2 einen Eintrag von UserID 3 bearbeiten kann. Man soll halt nur seine eigenen erstellten Sachen bearbeiten können.

    Dann debugge doch einmal selbständig. Ich würde z. B. in der Funktion print_r($objectEditor->userID);exit; ausprobieren, um zu sehen, was rauskommt. Dann das gleiche mit WCF::getUser()->userID.

    Managed Webhosting, hochwertige Plugins und individuelle Auftragsarbeiten:

    Julian-Pfeil.de

  • Das Problem das UserID 2 einen Eintrag von UserID 3 bearbeiten kann. Man soll halt nur seine eigenen erstellten Sachen bearbeiten können.

    Hast Du im Objekt eine Eigenschaft, welche den „Eigentümer“ vom Eintrag speichert?

    Ich habe es mal in der FooEditForm.class.php wie folgt gemacht. Es ist allerdings möglich, dass es irgendwie besser oder anders geht. Hat zumindest problemlos funktioniert.

    Und in der FooAction habe ich das Löschen wie folgt validiert. Damit eben User A nicht Einträge von User B löschen darf:

    Code
    public function validateDelete()
        {
            parent::validateDelete();
    
            foreach ($this->objects as $object) {
                if ($object->userID != WCF::getUser()->userID && WCF::getSession()->getPermission('admin.content.canManageCompanies') == 0) {
                    throw new PermissionDeniedException();
                }
            }
        }

    Edited once, last by itsmeJAY (January 1, 2023 at 11:43 AM).

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!