Cum solicit autorizare / autentificare pentru vizualizarea unui set specific de postări / pagini?

8 nov. 2012, 18:55:16
Vizualizări: 34.4K
Voturi: 10

Lucrez la un site WordPress pentru un client care dorește un 'intranet' intern pentru angajații săi. Nevoile de bază sunt:

  1. Comunicarea internă
  2. Găzduirea documentelor importante ale companiei
  3. Oferirea accesului rapid la resurse pentru angajați.

Aceste informații sunt sensibile și destinate doar angajaților. Ei doresc ca fiecare angajat să aibă un nume de utilizator / parolă și să poată vizualiza informațiile și documentele doar după autentificare.

Am văzut aceste plugin-uri, și câteva asemănătoare, dar par limitate și, bineînțeles, sunt complet depășite acum:

Știu că pot proteja cu parolă postări / pagini individuale. Pot proteja cu parolă o întreagă categorie de postări sau, și mai bine, un tip de postare personalizat? Practic, trebuie să grupez anumite pagini / postări sub o autentificare. Informațiile sunt sensibile, așa că nu pot fi disponibile, de exemplu, în feed-ul RSS. Cum pot face acest lucru?

  • Opțiunea 1 (mai puțin dezirabilă): să am întregul WordPress în spatele unui zid de autentificare
  • Opțiunea 2 (mai dezirabilă): să am doar paginile / postările interne în spatele zidului de autentificare

În concluzie: sunt interesat de opțiunea 1 dacă este MULT mai ușoară, dar aș prefera opțiunea 2. În prezent, după câteva cercetări, găsesc doar plugin-uri depășite care ajută cu acest lucru și nu pot găsi o modalitate fiabilă de a implementa niciuna dintre opțiuni. Mulțumesc pentru ajutor!

0
Toate răspunsurile la întrebare 6
0

Aceasta este doar o modificare a răspunsului lui timshutes - dacă dorești ca anumite pagini să necesite autentificare și nu vrei să le incluzi într-un tip personalizat de postare, poți adăuga în functions.php:

add_shortcode('need_login', 'shortcode_needLogin');

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

Apoi, în partea de sus a paginilor pentru care dorești să fie necesară autentificarea, poți pur și simplu să adaugi:

[need_login]
19 iul. 2016 23:06:47
0

Este posibil să verifici pe paginile de arhivă corespunzătoare și pe paginile individuale

Dar un lucru pe care ar trebui să-l faci cu siguranță, alături de toate celelalte soluții pe care le adopti, este să folosești filtrul the_posts. Acesta filtrează postările pe care le preia orice WP_Query. Vei primi un array de obiecte post. Verifică condiția și elimină obiectul dacă este prezent. Acesta este destinat cazurilor în care toate celelalte soluții sunt ocolite. Este ultima rezervă dacă un plugin necunoscut preia postările fără ca tu să știi despre acest lucru.

Un alt lucru pe care ar trebui să-l folosești este filtrul pre_get_posts pentru a verifica variabilele interogării și a le modifica conform cerințelor

Un altul este filtrul posts_where, folosește-l pentru a adăuga o altă clauză WHERE la interogarea MySQL

Acest lucru nu este complet sigur, dar ar trebui să acopere majoritatea cazurilor și chiar majoritatea plugin-urilor externe.

Dacă folosești un tip de postare personalizat, devine mult mai ușor. Poți seta capabilități personalizate pentru acel post_type și apoi să acorzi acele capabilități doar utilizatorilor cu un anumit rol.

Poți cere clientului tău să seteze manual fiecare postare ca privată, dar poți fi sigur că vor uita din când în când. Dacă securitatea este importantă, este mai bine să nu alegi această opțiune.

8 nov. 2012 20:07:56
0

Acesta este un răspuns vechi, dar iată cum am rezolvat în cele din urmă această problemă.

  1. Am creat un tip de postare personalizat pentru Paginile Intranet.
  2. Am adăugat o funcție "force_login" în functions.php
  3. Am inclus funcția de forțare a autentificării în partea de sus a tuturor fișierelor șablon de pagină necesare.

Ați putea personaliza acest lucru pentru a permite doar anumitor utilizatori - de exemplu, folosind plugin-ul "Members" menționat de @jason.

Codul:

În functions.php

/* Cerere de Autentificare pentru Intranet */

function my_force_login() {
global $post;

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

În partea de sus a page-intranet.php și single-intranet-pages.php

<?php my_force_login(); ?>

ȘI... asta e tot. Funcționează.

Note despre securitate:

  • Nu știu exact de ce, dar nu cred că securitatea acestei metode este complet infailibilă.
  • Funcționează în situația mea, dar faceți mai multe cercetări dacă aveți nevoie de securitate infailibilă.
  • Consultați răspunsul lui @Mridul mai jos pentru mai multe informații

Dacă aveți o metodă simplă pentru asta care este mai sigură, lăsați-o mai jos și o voi marca ca răspuns corect.

6 aug. 2013 17:18:54
0

Puteți seta vizibilitatea conținutului ca privată pe anumite pagini, ceea ce ar necesita ca vizitatorii să aibă un cont de conectare WordPress și niveluri de permisiuni pentru a vizualiza conținutul. Ceea ce aș putea sugera este să creați un template-intranet.php pentru pagina "Intranet" și să adăugați un meniu personalizat pentru paginile care fac parte din intranet, astfel încât acestea să poată fi listate pe acea pagină. Totuși, va trebui să setați toate paginile ca Private.

O soluție alternativă pentru a seta toate paginile intranetului ca Private ar fi să scrieți în functions.php o condiție care să verifice dacă pagina curentă este o subpagina a paginii "Intranet" – dacă pagina este o subpagina a intranetului, atunci verificați dacă utilizatorul este conectat, iar dacă nu este, redirecționați-l, altfel continuați.

8 nov. 2012 19:23:19
0

Dacă dorești să gestionezi manual autentificarea și să o integrezi în sistemul de autentificare WordPress, atunci @Rezen are ideea corectă. Totuși, eu aș prefera să folosesc un Șablon de Pagină specific sau o listă de Șabloane de Pagină pentru a verifica autentificarea.

De asemenea, poți consulta plugin-ul "Members" al lui Justin Tadlock, care oferă multe funcționalități de gestionare a rolurilor personalizate pe care le-ai putea utiliza.

8 nov. 2012 20:01:41
0

Filtre:

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';"));

Dacă utilizatorul nu este înregistrat, redirecționează către pagina de autentificare pe site (guest.php, fără dashboard)

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

După autentificare, redirecționează către pagina principală

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

Elimină pagina wp die (redirecționează către pagina principală)

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