Wie können Postanhänge, die sich auf einen benutzerdefinierten Posttyp beziehen, von nicht angemeldeten Benutzern auf einer Unterwebsite einer Multisite-Installation geschützt werden?

Ich entwickle einen einfachen “nur für Mitglieder” -Abschnitt innerhalb einer Website, mit der alleinigen Absicht, dem Kunden zu erlauben, Dateien für seine Mitglieder zu veröffentlichen. Mir ist schnell klar geworden, dass die Anhänge der Beiträge selbst in keiner Weise in WordPress geschützt sind. Wenn ein Benutzer beispielsweise nicht angemeldet war und die direkte URL der Datei kannte, konnte er darauf zugreifen / sie mit anderen teilen. Dies ist ein großes Problem, da die Dokumente sehr empfindlich auf das Geschäft des Kunden reagieren.

Der Mitgliederbereich wird mit allen Tools erstellt, die Sie erwarten – eine benutzerdefinierte Seitenvorlage, gepaart mit current_user_can-Bedingungen, wp_redirects, benutzerdefinierten Rollen mit dem Mitglieder-Plugin und einem benutzerdefinierten Beitragstyp für die “Datei” -Beiträge. Jede Datei im benutzerdefinierten Post-Typ verfügt über Metaboxen, mit denen der Client Dateien / Dokumente anhängen kann (.jpg, .gif, .pdf, um nur einige zu nennen). Ich verwende WPAlchemy und seine Media Access-class, um die Metabox-Anforderungen zu erfüllen.

Der Bereich des Mitglieds wird auf einer bestimmten Site innerhalb einer Multi-Site-Installation ausgeführt, die insgesamt aus 3 Sites besteht (die alle mit demselben Unternehmen verbunden sind).

Ich wäre sehr dankbar, wenn mich jemand in die richtige Richtung lenken könnte. Ich würde es vorziehen, nicht eine Reihe von Plugins verwenden zu müssen, da ich die Dinge gerne einfach habe und gerne weiß, was der Code eigentlich macht. Ich verstehe auch, dass dies nicht unbedingt eine WordPress-Frage und eher eine .htaccess Frage sein muss (wie ich aus den Fragen, auf die ich gestoßen bin, und ihren Antworten), aber ich kann nicht umhin zu denken, dass meine Frage ist Dies ist insofern unterschiedlich, als es sich auf die Multi-Site bezieht und die Notwendigkeit eines separaten Upload-Ordners.

Hier sind meine Gedanken soweit, die Anhänge zu schützen:

  1. Ich könnte irgendwie ein separates Medien-Upload-Verzeichnis erstellen, in das die Metaboxen die Dateien von jedem Post innerhalb des benutzerdefinierten Post-Typs hochladen. Da diese Dateien von den übrigen Medienuploads der Websites getrennt sind (nur die Anhänge des Mitglieds müssen geschützt werden), würde es einfacher, nur diesen Ordner mit .htaccess zu schützen.

    1.1. Ist eine Art .htaccess Modification definitiv der Weg dorthin?

    1.2. Wie könnte ich das separate Medien-Upload-Verzeichnis erstellen und die Metaboxen von WPAlchemy die Dateien hier hochladen lassen? Ich habe einen uploads_dir Filter-Hook gesehen, bin mir aber nicht sicher, wie ich ihn verwenden soll.

  2. Anstatt ein separates Medien-Upload-Verzeichnis wie oben beschrieben zu erstellen, wäre es vielleicht die bessere Lösung, nur die Anhänge zu schützen, die zu meinem benutzerdefinierten Post-Typ gehören. Aber ich habe keine Ahnung, wie das mit der .htaccess-Lösung zusammenhängt. Es scheint, als wäre es einfacher, einen separaten Ordner zu haben …

Ich habe die folgenden Fragen gesehen, die meinen eigenen sehr ähnlich sind:

  1. Wie kann ich Uploads schützen, wenn der Benutzer nicht angemeldet ist?

    Es sieht so aus, als würde es sich um eine nicht-multi-site Installation von WP handeln, und die gesamte Site ist ein Member-Bereich vs. ein Bereich meiner Site. Denken Sie daran, dass nicht alle Uploads geschützt werden sollen, sondern nur diejenigen, die an den benutzerdefinierten Posttyp angehängt sind. Ich mag die Idee , Anfragen über ein PHP-Skript zu übergeben ? Vielleicht könnte ich dieses Skript verwenden und ändern, um ein separates Upload-Verzeichnis auf der 1-Site innerhalb meiner Multisite-Installation zu verwenden?

  2. Schützen Sie Uploads in Multisite

    und..

  3. Wie schränkt man den Zugriff auf hochgeladene Dateien ein?

Aktualisieren:

Habe diesen Thread aber keine Lösung gefunden. Es scheint der bessere Weg zu sein, wenn ich es zum Laufen bringen kann. Ich werde herausfinden, wie ich die Dateien in ein neues Upload-Verzeichnis hochladen kann, nachdem ich alle Dateien der Site geschützt habe

Solutions Collecting From Web of "Wie können Postanhänge, die sich auf einen benutzerdefinierten Posttyp beziehen, von nicht angemeldeten Benutzern auf einer Unterwebsite einer Multisite-Installation geschützt werden?"

Andrew,

Wenn Ihr benutzerdefinierter Post-Typ nur auf einer Untersite Ihrer Multi-Site-Installation vorhanden ist, können Sie in Ihrer Vorlagendatei, in der die Anzeige und Ausgabe Ihres benutzerdefinierten Post-Typs gesteuert wird, mit einfachen bedingten functionen wie z.

  • is_singular (‘post_type_name’);
  • is_user_logged_in ();

… und in der Tat könnte es so einfach sein wie;

 < ?php if(is_user_logged_in()) : ?> < ?php echo wp_get_attachment_url( 12 );?> < ?php else : ?> //Do what you want here, such as nothing or redirect to login page or alert user that some content is hidden etc. < ?php endif;?> 

Hoffentlich entspricht das dem, wonach Sie suchen. Wenn es nicht so einfach ist wie das für die Lösung, lass es mich wissen und wir werden tiefer graben.

PS. Ersetzen Sie wp_get_attachment_url () mit dem, was Ihrem Zweck entspricht.

  • wp_get_attachment_metadata ()
  • wp_read_image_metadata ()
  • wp_get_attachment_image ()
  • wp_get_attachment_image_src ()
  • wp_get_attachment_thumb_file ()
  • wp_get_attachment_thumb_url ()
  • wp_get_attachment_link ()
  • wp_get_attachment_url ()

@Codex … HIER

HINWEIS

Oder … im Falle der Verwendung von WPAlchemy würden Sie stattdessen die obige wp_get_attachment … etc durch Ihren benutzerdefinierten Metabox-Code ersetzen.

 < ?php custom_metabox->the_field('name'); ?>