Restricționarea accesului administrativ la anumite pagini pentru anumiți utilizatori

18 mar. 2013, 15:52:16
Vizualizări: 24K
Voturi: 7

După cum spune și titlul, aș dori să restricționez accesul din backend la anumite pagini pentru anumiți utilizatori.

În timp ce lucram la un site cu 45-50 de pagini, mi-am dat seama că ar fi o experiență mult mai bună pentru utilizatori dacă meniul Pagini ar lista doar acele pagini pe care utilizatorul ar trebui să poată să le modifice/actualizeze.

Am încercat pluginurile de mai jos fără succes. Advanced Access Manager are funcționalitatea necesară dar nu funcționează/are erori pe versiunea 3.5.1.

http://wordpress.org/extend/plugins/advanced-access-manager http://wordpress.org/extend/plugins/role-scoper http://wordpress.org/extend/plugins/adminimize http://wordpress.org/extend/plugins/s2member

Există vreo soluție cu un snippet de cod în functions.php?

3
Comentarii

Vrei să controlezi accesul pe bază de utilizator? Adică, nu poți folosi Roluri sau Capabilități pentru a face acest lucru?

s_ha_dum s_ha_dum
18 mar. 2013 16:27:49

Accesul/vizualizarea bazată pe Roluri sau Capabilități va funcționa!

BoBoz BoBoz
18 mar. 2013 16:31:29

Ar trebui să subliniez că partea importantă este ca utilizatorul/rolul specificat să nu vadă anumite pagini în back-end. Spre deosebire de a nu putea edita anumite pagini.

BoBoz BoBoz
18 mar. 2013 16:36:56
Toate răspunsurile la întrebare 2
7

Acest cod funcționează bine pentru mine (în functions.php):

$user_id = get_current_user_id();
if ($user_id == 2) {
    add_filter( 'parse_query', 'exclude_pages_from_admin' );
}

function exclude_pages_from_admin($query) {
    global $pagenow,$post_type;
    if (is_admin() && $pagenow=='edit.php' && $post_type =='page') {
        $query->query_vars['post__not_in'] = array('123','234','345');
    }
}
18 mar. 2013 18:54:19
Comentarii

Acesta este un răspuns foarte bun, +1. Reține că poți accepta propriile răspunsuri ca fiind corecte...

Johannes Pille Johannes Pille
18 sept. 2014 06:10:56

Ok, voi face asta :)

BoBoz BoBoz
18 sept. 2014 20:51:33

Răspunsul lui BoBoz a funcționat excelent pentru o vreme, dar acum primesc un Avertisment: "call_user_func_array() așteaptă ca parametrul 1 să fie un callback valid, funcția 'exclude_pages_from_admin' nu a fost găsită sau numele funcției este invalid". Care ar fi cea mai bună metodă de a repara acest fragment de cod pentru a nu mai genera avertismentul? Mulțumesc!

ben.kaminski ben.kaminski
13 ian. 2016 21:09:32

Sunt nou în WordPress. Spuneți-mi unde se află fișierul functions.php. Este în folderul wp-includes? Dacă da, primesc eroarea "Call to undefined function add_filter()".

Nishad Up Nishad Up
18 feb. 2016 11:35:11

În prezent, utilizatorul meu are rolul de "Autor" și nu vede meniul "Pagini" în secțiunea de administrare. Nu vreau să-i cresc permisiunile mai mult decât strictul necesar pentru a-i permite accesul la trei pagini. Am introdus codul, dar utilizatorul nu are cum să acceseze paginile pentru că nu are "Pagini" în meniul din stânga. Cum aș putea face ca acel element de meniu să apară, astfel încât atunci când dă click pe el, să-și vadă cele trei pagini pe care are permisiunea să le editeze? Dacă nimic altceva, dacă aș putea afișa link-ul "Editare" pe pagina însăși, ar funcționa și asta. Dar acest fragment de cod nu oferă nici această funcționalitate.

harperville harperville
25 feb. 2017 23:48:24

Știu că această întrebare este veche, dar condiționalele ar trebui plasate în interiorul funcției apelate, astfel încât indiferent de situație, funcția să existe întotdeauna versus a fi nedeclarată (editare) Văd că răspunsul de mai jos explică și acest lucru.

Philip Ingram Philip Ingram
15 aug. 2019 22:28:25

De ce folosim hook-ul parse_query? Ce îl face pe acesta cel mai potrivit? Mulțumesc

JDandChips JDandChips
13 sept. 2021 17:09:17
Arată celelalte 2 comentarii
1

Sistemul nu mă lasă să comentez, așa că adaug acest răspuns ca o soluție nouă.

Eroarea:

Avertisment: "call_user_func_array() se așteaptă ca parametrul 1 să fie un callback valid, funcția 'exclude_pages_from_admin' nu a fost găsită sau este un nume de funcție invalid".

... apare deoarece funcția este apelată doar după verificarea user_id. Deci dacă ești autentificat CA alt utilizator, funcția nu există, iar filtrul returnează această eroare, deoarece caută funcția dar nu o găsește.

Soluția corectă ar fi:

add_filter( 'parse_query', 'exclude_pages_from_admin' );

function exclude_pages_from_admin($query) {
    $user_id = get_current_user_id();

    if ($user_id == 2) {
    global $pagenow,$post_type;
     if (is_admin() && $pagenow=='edit.php' && $post_type =='page') {
        $query->query_vars['post__not_in'] = array('123','234','345');
     }
    }
}
11 ian. 2017 18:28:16
Comentarii

Am editat răspunsul original pentru a corecta înregistrarea greșită a funcției de callback.

Tim Tim
9 iun. 2020 16:45:55