web-dev-qa-db-fra.com

One-of-Multiples-site-site-based-installation?

Je développe une simple section réservée aux membres dans un site Web, dans le seul but de permettre au client de publier des fichiers pour ses membres. Je me suis vite rendu compte que les pièces jointes des publications elles-mêmes ne sont protégées d'aucune manière dans WordPress. Par exemple, si un utilisateur n'était pas connecté et s'il connaissait l'URL directe du fichier, il pourrait y accéder/le partager avec d'autres. C'est un gros problème car les documents sont plutôt sensibles à l'activité du client.

La zone de membre est construite en utilisant tous les outils que vous attendez - un modèle de page personnalisé associé aux conditions actuelles current_user_can, wp_redirects, des rôles personnalisés à l'aide du plugin members et un type de publication personnalisé pour les publications "fichier". Chaque publication de fichier dans le type de publication personnalisée comporte des métaboxes que le client peut utiliser pour joindre des fichiers/documents (.jpg, .gif, .pdf, pour en nommer quelques-uns). J'utilise WPAlchemy et sa classe d'accès au média pour satisfaire aux exigences de la metabox.

L'espace membre sera exploité sur 1 site particulier au sein d'une installation multisite, qui comprend 3 sites au total (tous liés à la même entreprise).

Je serais très reconnaissant si quelqu'un pouvait me guider dans la bonne direction. Je préférerais ne pas avoir à utiliser un tableau de plugins, car j'aime garder les choses simples et savoir ce que le code fait réellement. Je réalise aussi qu'il ne s'agit pas nécessairement d'une question WordPress, mais plutôt d'une question .htaccess (comme le montrent les questions que j'ai rencontrées et leurs réponses), mais je ne peux m'empêcher de penser que ma question est différente. en ce sens qu'il concerne le multisite et qu'il est éventuellement nécessaire de créer un dossier de téléchargement séparé.

Jusqu'ici, je pense à la protection des pièces jointes:

  1. Je pourrais en quelque sorte créer un répertoire de téléchargement de média distinct dans lequel les métaboxes téléchargent les fichiers à partir de chaque publication dans le type de publication personnalisé. Parce que ces fichiers sont séparés du reste des téléchargements de média des sites (seules les pièces jointes du membre doivent être protégées), il serait plus simple de protéger ce dossier à l'aide de .htaccess.

    1.1. Une sorte de modification .htaccess est-elle vraiment la solution?

    1.2. Comment pourrais-je créer un répertoire de téléchargement de média distinct et laisser les métaboxes de WPAlchemy télécharger les fichiers ici? J'ai vu un crochet de filtre uploads_dir mais je ne sais pas trop comment l'utiliser.

  2. Plutôt que de créer un répertoire de téléchargement de média distinct, comme indiqué ci-dessus, la meilleure solution serait peut-être de ne protéger que les pièces jointes appartenant à mon type de publication personnalisé. Mais alors, je ne sais pas du tout en quoi cela est lié à la solution .htaccess. Il semble que le fait d'avoir un dossier séparé serait plus facile ...

J'ai vu les questions suivantes qui sont très similaires aux miennes:

  1. Comment protéger les téléchargements, si l'utilisateur n'est pas connecté?

    On dirait qu’il s’agit d’une installation de WP non multisite, et que l’ensemble du site correspond à un espace membre par rapport à une section de mon site. Rappelez-vous, je ne veux pas que tous les envois soient protégés, mais seulement ceux attachés au type d'article personnalisé. J'aime bien l'idée de transmettre des requêtes via un script php ? Peut-être que je pourrais utiliser ce script et le modifier pour utiliser un répertoire de téléchargement séparé sur le site 1 de mon installation multisite?

  2. Protégez les téléchargements sur plusieurs sites

    et..

  3. Comment restreindre l'accès aux fichiers téléchargés?

Mise à jour:

Trouvé ce fil mais aucune solution. Cela semble être la meilleure voie à suivre si je peux le faire fonctionner. Je trouverai comment télécharger les fichiers dans un nouveau répertoire de téléchargement après avoir réussi à protéger tous les fichiers du site.

1
Andrew

Andrew,

Dans le cas où votre type de publication personnalisé n'existe que sur un seul sous-site de votre installation Multi Site, vous pouvez, dans votre fichier de modèle, contrôler l'affichage et la sortie de votre type de publication personnalisée avec des fonctions conditionnelles simples telles que;

  • is_singular ('post_type_name');
  • is_user_logged_in ();

... et en fait, cela pourrait être aussi simple que;

<?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;?>

J'espère que cela va dans le sens de ce que vous recherchez. Si ce n'est pas aussi simple que cela pour la solution faites le moi savoir et nous allons creuser plus profondément.

PS Remplacez wp_get_attachment_url () par ce qui vous convient

  • 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 ... ICI

REMARQUE

Ou bien ... dans le cas de l'utilisation de WPAlchemy, vous devriez remplacer le wp_get_attachment ci-dessus ... etc par votre code metabox personnalisé.

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