Eliminarea posibilității de a accesa anumite meniuri din admin

26 apr. 2014, 16:12:06
Vizualizări: 22.5K
Voturi: 3

Încerc să elimin unele dintre funcțiile administrative pentru un utilizator cu rolul de contributor. Mai exact, vreau să-i restricționez accesul la anumite elemente din meniul administrativ, precum comentarii, unelte, media etc. Am reușit să elimin elementele dorite din meniul admin folosind acest cod:

function remove_menus(){

$author = wp_get_current_user();
if(isset($author->roles[0])){ 
    $current_role = $author->roles[0];
}else{
    $current_role = 'no_role';
}

if($current_role == 'contributor'){  
  remove_menu_page( 'index.php' );                  //Panou de control
  remove_menu_page( 'edit.php' );                   //Articole
  remove_menu_page( 'upload.php' );                 //Media
  remove_menu_page( 'tools.php' );                  //Unelte
  remove_menu_page( 'edit-comments.php' );          //Comentarii

}

}
add_action( 'admin_menu', 'remove_menus' );

Funcționează perfect. Problema pe care o întâmpin este că pot adăuga manual șirul de interogare în URL, de exemplu /wp-admin/edit.php și asta mă va duce la ecranul de editare a articolelor. Știe cineva o modalitate de a restricționa complet accesul la aceste pagini, pe lângă ascunderea lor din meniul administrativ?

4
Comentarii

Exact ce doriți ca acest utilizator să poată face? Sună mai degrabă că aveți nevoie de un rol personalizat în loc să încercați să modificați rolul de contributor în modul în care o faceți acum.

s_ha_dum s_ha_dum
26 apr. 2014 18:09:06

Doresc ca utilizatorul să poată edita propriul profil și să gestioneze propriile articole ale unui tip de postare personalizat. Nu cred că am nevoie de un rol personalizat, deoarece cel de contributor îndeplinește deja ce am nevoie. Am nevoie doar de o metodă de a împiedica vizualizarea anumitor pagini în zona de administrare. Dacă creez un rol personalizat și le ofer dreptul de a-și gestiona propriile postări, nu ar apărea aceeași problemă?

RoseCoder RoseCoder
26 apr. 2014 19:45:08

Cum pot dezactiva accesul unui anumit tip de utilizator la setările Woocommerce?

MOSD MOSD
1 feb. 2021 17:26:42

@MOSD nu posta o întrebare ca soluție la o altă întrebare. Știu că nu ai suficiente puncte de reputație pentru a lăsa comentarii la întrebările altor persoane, dar acesta nu este un motiv, iar dacă vei continua, vei fi marcat ca spammer de sistemul anti-spam.

Tom J Nowell Tom J Nowell
1 feb. 2021 18:03:29
Toate răspunsurile la întrebare 4
1

Am rezolvat în final și iată codul pe care l-am folosit:

function restrict_menus() {
    $author = wp_get_current_user();

    if( isset( $author->roles[0] ) ) { 
        $current_role = $author->roles[0];
    } else {
        $current_role = 'no_role';
    }

    if( 'contributor' == $current_role ) {  
        $screen = get_current_screen();
        $base   = $screen->id;

        if( 'edit-post' == $base || 'upload' == $base || 'tools' == $base || 'edit-comments' == $base ) {
            wp_die( 'Încerci să faci mișelii?' );
        }
    }
}
add_action( 'current_screen', 'restrict_menus' );
26 apr. 2014 20:55:21
Comentarii

acest lucru a fost cu adevărat util, mulțumesc pentru urmărirea cu propria ta soluție

Snowball Snowball
14 apr. 2016 09:16:26
0

Știu că această întrebare a fost deja răspunsă și este veche. Totuși, am dorit să ofer o soluție alternativă. Iată cum am făcut acest lucru într-un plugin pe care l-am scris acum ceva timp (am modificat codul meu pentru a folosi paginile tale).

Deoarece dorești să restrângeți rolul de contributor, poți folosi capabilitățile rolului. Contributorii nu pot publica articole, așa că ai putea face următoarele.

Partea 1: Eliminarea elementelor din meniul Admin

add_action( 'admin_menu', 'tcd_remove_admin_menus' );
function tcd_remove_admin_menus() {

    // nu face nimic dacă utilizatorul poate publica articole
    if ( current_user_can( 'publish_posts' ) ) {
        return;
    }

    // elimină aceste elemente din meniul admin
    remove_menu_page( 'edit.php' );          // Articole
    remove_menu_page( 'upload.php' );        // Media
    remove_menu_page( 'tools.php' );         // Unelte
    remove_menu_page( 'edit-comments.php' ); // Comentarii

}

Totuși, după cum ai menționat, acest lucru nu împiedică utilizatorul să introducă direct URL-ul paginii. Iată cum am implementat restricția de acces la pagini:

Partea 2: Restricționarea accesului la paginile Admin

add_action( 'current_screen', 'tcd_restrict_admin_pages' );
function tcd_restrict_admin_pages() {

    // nu face nimic dacă utilizatorul poate publica articole
    if ( current_user_can( 'publish_posts' ) ) {
        return;
    }

    // preia ID-ul paginii curente
    $current_screen_id = get_current_screen()->id;

    // determină care ecrane sunt restricționate
    $restricted_screens = array(
        'edit',
        'upload',
        'tools',
        'edit-comments',
    );

    // Restricționează accesul la pagină
    foreach ( $restricted_screens as $restricted_screen ) {

        // compară ID-ul ecranului curent cu fiecare ecran restricționat
        if ( $current_screen_id === $restricted_screen ) {
            wp_die( __( 'Nu aveți permisiunea de a accesa această pagină.', 'tcd' ) );
        }

    }

}

Pentru mine, folosirea capabilităților rolului și a unui array a făcut lucrul mai ușor. Oricum, sper că această metodă este utilă.

Noroc.

16 mar. 2017 00:21:47
0

De obicei folosesc (și recomand) pluginul Members. Interfața este foarte ușor de utilizat și ai avantajul suplimentar de a-ți stoca logica de roluri/permisiuni în baza de date (în loc de cod), ceea ce face schimbările "pe loc" mai ușor de realizat.

Acest plugin îți permite chiar să creezi un rol personalizat (poate vrei să inventezi unul numit "Editor Foto" sau "Aprobator Comentarii" etc.) și să limitezi ce meniuri pot vedea și accesa. Cred că acest plugin va face exact ceea ce dorești.

26 apr. 2014 18:14:20
0

Puteți crea un rol personalizat așa cum sugerează s_da_hum sau elimina capabilitățile din rolul de contributor prin adăugarea acestui cod în fișierul functions.php al temei child.

add_action( 'init', 'wpsites_remove_contributor_capabilities' );

function wpsites_remove_contributor_capabilities() {

$contributor = get_role( 'contributor' );

$caps = array(
    'edit_posts',
    'delete_posts',
);

foreach ( $caps as $cap ) {

    $contributor->remove_cap( $cap );
    }
}

Sursa https://codex.wordpress.org/Function_Reference/add_role

26 apr. 2014 18:57:26