Come richiedere l'autorizzazione / login per visualizzare uno specifico insieme di articoli / pagine?

8 nov 2012, 18:55:16
Visualizzazioni: 34.4K
Voti: 10

Sto lavorando su un sito WordPress per un cliente che desidera una 'intranet' interna per i suoi dipendenti. Le esigenze di base sono:

  1. Comunicare internamente
  2. Conservare documenti aziendali importanti
  3. Fornire ai dipendenti un accesso rapido alle risorse

Queste informazioni sono sensibili e riservate solo ai dipendenti. Vorrebbero che ogni dipendente avesse un nome utente/password e potesse visualizzare informazioni e documenti solo dopo aver effettuato l'accesso.

Ho visto questi plugin, e alcuni simili, ma sembrano limitati e ovviamente sono completamente obsoleti ora:

So che posso proteggere con password singoli articoli/pagine. Posso proteggere con password un'intera categoria di articoli, o meglio ancora un custom post-type? In pratica, ho bisogno di raggruppare alcune pagine/articoli sotto un login. Le informazioni sono sensibili quindi non possono essere disponibili, ad esempio nel feed RSS. Come posso fare?

  • Opzione 1 (meno desiderabile): avere un'intera installazione WordPress dietro un muro di login
  • Opzione 2 (più desiderabile): avere solo le pagine/articoli interni dietro il muro di login

In conclusione: sono interessato all'opzione 1 se è MOLTO più facile, ma preferirei l'opzione 2. Attualmente, dopo alcune ricerche, trovo solo plugin obsoleti che aiutano con questo, e non riesco a trovare un modo affidabile per realizzare nessuna delle due opzioni. Grazie per il vostro aiuto!

0
Tutte le risposte alla domanda 6
0

Questa è solo una modifica della risposta di timshutes - se vuoi che pagine specifiche richiedano il login e non desideri inserirle in un custom post type, puoi aggiungere al file functions.php:

add_shortcode('need_login', 'shortcode_needLogin');

function shortcode_needLogin() {
    if (!is_user_logged_in()) {
        auth_redirect();
    }
}

E poi all'inizio delle pagine per cui vuoi richiedere il login, puoi semplicemente inserire:

[need_login]
19 lug 2016 23:06:47
0

È possibile inserire il controllo sulle pagine di archivio corrispondenti e sulle pagine singole

Ma una cosa che dovresti assolutamente fare insieme a tutte le altre soluzioni che adotti è utilizzare il filtro the_posts. Filtra i post che qualsiasi WP_Query recupera. Riceverai un array di oggetti post. Verifica la condizione e rimuovi l'oggetto se presente. Questo è pensato per quando tutte le altre soluzioni vengono bypassate. È l'ultima risorsa se qualche plugin sconosciuto recupera i post senza che tu ne abbia idea.

Un'altra cosa che dovresti usare è il filtro pre_get_posts per verificare le variabili della query e modificarle secondo necessità

Un altro ancora è il filtro posts_where, usalo per aggiungere un'altra clausola where alla query mysql

Non è completamente sicuro ma dovrebbe coprire la maggior parte dei casi e persino la maggior parte dei plugin esterni.

Se utilizzi un custom post type, diventa molto più semplice. Puoi impostare capacità personalizzate per quel post_type e poi assegnare quelle capacità solo agli utenti con un ruolo particolare.

Puoi chiedere al tuo cliente di impostare manualmente ogni post come privato ma puoi essere certo che lo dimenticheranno ogni tanto. Se la sicurezza è importante, è meglio non optare per questa soluzione.

8 nov 2012 20:07:56
0

Questo è vecchio - ma ecco come ho risolto definitivamente questo problema.

  1. Ho creato un custom post type per le Pagine Intranet.
  2. Ho aggiunto una funzione "force_login" in functions.php
  3. Ho incluso la funzione force_login all'inizio di tutti i file di template di pagina necessari.

Potresti personalizzarlo per consentire l'accesso solo a determinati utenti - ad esempio, utilizzando il plugin "Members" menzionato da @jason.

Il codice:

In functions.php

/* Richiede Autenticazione per l'Intranet */

function my_force_login() {
global $post;

if (!is_user_logged_in()) {
    auth_redirect();
    }
}    

All'inizio di page-intranet.php e single-intranet-pages.php

<?php my_force_login(); ?>

E... questo è tutto. Funziona.

Note sulla sicurezza:

  • Non so esattamente perché, ma non penso che la sicurezza di questo metodo sia completamente a prova di proiettile.
  • Funziona per la mia situazione, ma approfondisci se hai bisogno di una sicurezza infallibile.
  • Vedi la risposta di @Mridul qui sotto per maggiori informazioni

Se hai un metodo semplice per questo che è più sicuro, lascialo qui sotto e lo segnerò come risposta.

6 ago 2013 17:18:54
0

Puoi impostare la visibilità del contenuto come privata su pagine specifiche e questo richiederebbe ai visitatori di avere un login WordPress E i livelli di autorizzazione necessari per visualizzare il contenuto. Quello che potrei suggerire è creare un template-intranet.php per la pagina "Intranet" e aggiungere un menu personalizzato per le pagine che fanno parte dell'intranet in modo che possano essere elencate su quella pagina. Dovresti comunque impostare lo stato di tutte le pagine come Privato.

Un'alternativa per rendere tutte le pagine dell'intranet Private sarebbe nel file functions.php dove puoi scrivere una condizione per verificare se la pagina corrente è una sottopagina della pagina "Intranet" - se la pagina è una sottopagina dell'intranet, allora verifica se l'utente è loggato, e se non lo è reindirizzalo, altrimenti prosegui.

8 nov 2012 19:23:19
0

Se vuoi gestire manualmente l'autenticazione e integrarla con l'autenticazione di WordPress, allora @Rezen ha l'idea giusta. Preferirei però utilizzare uno specifico Page Template o una lista di Page Template per verificare l'autenticazione.

Puoi anche dare un'occhiata al plugin "Members" di Justin Tadlock, che offre molte funzionalità di gestione personalizzata dei ruoli che potresti sfruttare.

8 nov 2012 20:01:41
0

Filtri:

add_filter('template_include', 'theme_check_user_permissions', 1, 1);
add_filter('logout_url','theme_logout_redirect');
if(!current_user_can('edit_users')) add_filter( 'wp_die_handler', create_function('',"return 'theme_wp_die_handler';"));

Se l'utente non è registrato, reindirizza alla pagina di login del sito (guest.php, non la dashboard)

function theme_check_user_permissions($template) 
{
    return (is_user_logged_in() ? $template : TEMPLATEPATH.'/guest.php');
}

Dopo il login reindirizza alla home page

function theme_logout_redirect($url, $redirect = null)
{
    return $url.'&amp;redirect_to='.urlencode(get_bloginfo('url'));
}

Rimuove la pagina wp die (reindirizza alla home)

function theme_wp_die_handler()
{
    wp_redirect(get_bloginfo('url'),307);
    exit;
}
2 ago 2013 14:06:34