Kategoriesystem überprüft nur existens der Kategorie

  • Hal


    Mir ist bei der erstellung eines Plugins gerade aufgefallen, dass das Kategoriesystem mittels getCategory aus der abstrakten Klasse AbstractDecoratedCategory nur prüft ob eine Kategorie existiert, nicht aber ob sie zum Plugin gehört.


    z.B. beim Artikel hinzufügen:

    Code
    $category = ArticleCategory::getCategory($this->categoryID);
    if ($category === null) {
       throw new UserInputException('categoryID', 'invalid');
    }


    Wenn ich den Inhalt Manipuliere mit einer ID die nicht existiert, so erhalte ich die Ausgabe wcf.acp.article.category.error.invalid. Hier fehlt übrigens die sprachvariable.


    Wenn ich nun aber eine ID aus einer Kategorie aus einem Plugin oder sonst wo nehme die existiert, so wird der Eintrag dann in die Datenbank geschrieben mit der "ungültigen" ID.


    Gruss


    Oliver

  • AbstractDecoratedCategory nur prüft ob eine Kategorie existiert, nicht aber ob sie zum Plugin gehört.

    Wenn du dir den Original Code anschaust dann wird doch sehwohl eine Klasse des Typs zurückgegeben den du implementiert hast ?

    Du erweiterst ja die Klasse und dann wird aus return new static($category); eben das gleiche wie z.B. return new ArticleCategory($category); (late static binding) was doch meines wissens deinem Wunsch entspricht ?

    In deiner Implementierung steht es dann frei im Construktor entsprechend den ObjectType zu überprüfen wenn du ganz sicher gehen willst.

  • Das ja. Jedoch geht es mir eher darum, dass man durch einfache Manipulation einen falschen Wert in die Datenbank bekommt. WoltLab möchte ja auch das die Pluginentwickler prüfen, dass keine falsche ID in die Datenbank kommt. Dies finde ich auch sehr sinnvoll. Ich finde da müsste man auch schauen das unteranderem bei Artikeln oder anderen Orten nicht eine categorieID eingespeichert werden kann welche nicht zum Object der Artikel gehört.

  • Dafür bist doch am ende du verantwortlich, vor dem Speichern musst du eh überprüfen ob die Kategory zugänglich isAccessible() ist in der du den Artikel erstellen möchtest und genau dort wird auch der object type geprüft ?

  • Dafür bist doch am ende du verantwortlich, vor dem Speichern musst du eh überprüfen ob die Kategory zugänglich isAccessible() ist in der du den Artikel erstellen möchtest und genau dort wird auch der object type geprüft ?

    Da sag ich doch auch nichts zu. Aber gut.

    Dann muss ich es umformulieren das halt z.B. beim Artikel nicht überprüft wird ob die Kategorie für die Artikel existiert.

    Ich habe ja nicht gesagt das es schlimm ist. Aber es ist durchaus etwas was man in einer weiteren Version korrigieren könnte.

  • OK, jetzt kann ich etwas damit anfangen:

    Im ACP fehlt beim erstellen eines Artikels die überprüfung ob die gewählte Kategorie zum Artikelsystem gehört :D

    Man kann also Artikel in Kategorien erstellen die zwar existieren aber z.B. zur filebase gehören und sie damit unauffindbar machen^^

  • Das glaube ich ehrlich gesagt nicht mal, die filebase prüft beispielsweise beim erstellen eines neuen Eintrags wie erwartet ob du zugriff auf die Kategorie hast und damit wird dann entsprechend auch der object type geprüft.

    Das Artikelsystem stellt hier eine Ausnahme dar, da man neue Artikel derzeit nur im ACP erstellen kann und hier implizit davon ausgegangen wird dass man dann auch in jeder Kategorie schreiben kann.

    Bedenke dass es auch hier keine gesonderten Rechte für das erstellen eines Artikels in einer bestimmten Kategorie gibt, entweder man kann Artikel überall erstellen oder eben nirgends.

Participate now!

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