• User

    Come nascondo l'admin agli altri utenti?

    Sono l'amministratore del sito che ho creato e altri due sono Editori ed essi dovrebbero poter gestire gli utenti che si registrano. Il problema sta nel fatto che in questo modo loro possono cancellare il mio utente o assegnare diritti a chi vogliono (per sè, cambiare i miei, creare altri admin)...

    Premesso che non vorrei utilizzare plugin, conoscete una qualche funzione da mettere nel file functions.php che nasconda il mio utente agli altri utenti? E/o che non consenta modifiche ai ruoli da un certo livello in su?
    (non so se serve, ma il mio admin non è più quello con id=1)

    Grazie mille...


  • Moderatore

    Ciao hermod.
    L'utente di tipo *Editor *in WordPress gestisce i contenuti ma non può cancellare gli utenti. 🙂

    Francesco


  • User

    @FDA said:

    Ciao hermod.
    L'utente di tipo *Editor *in WordPress gestisce i contenuti ma non può cancellare gli utenti. 🙂

    Ti devo contraddire...
    Ho appena creato un Editor di test tramite il mio account (Amministratore) e l'ho cancellato tramite un altro utente Editor che era già presente.


  • Moderatore

    Ciao hermod.
    Non so quale operazione tu faccia, con quale plugin opzionale e con quale utente. Mi riferisco alla documentazione di WordPress: codex.wordpress.org/Roles_and_Capabilities

    Per maggiore sicurezza verificherò con una demo vergine. 🙂

    Francesco


  • User

    Prova così:
    /** Hide Administrator From User List **/
    function isa_pre_user_query($user_search) {
    $user = wp_get_current_user();
    if (!current_user_can('administrator')) { // Is Not Administrator - Remove Administrator
    global $wpdb;

    $user_search->query_where = 
        str_replace('WHERE 1=1', 
            "WHERE 1=1 AND {$wpdb->users}.ID IN (
                 SELECT {$wpdb->usermeta}.user_id FROM $wpdb->usermeta 
                    WHERE {$wpdb->usermeta}.meta_key = '{$wpdb->prefix}capabilities'
                    AND {$wpdb->usermeta}.meta_value NOT LIKE '%administrator%')", 
            $user_search->query_where
        );
    

    }
    }
    add_action('pre_user_query','isa_pre_user_query');


  • User

    @mcrapanzano said:

    Prova così:
    /** Hide Administrator From User List **/
    .........

    Ciao, sto provando... e pare che funzioni!! 🙂

    Una domanda in più: Sai se è possibile fare anche in modo che l'utente non-admin possa non avere anche il modo di modificare o creare un utente assegnandogli il ruolo di Amministratore?
    Perchè, ci stavo pensando ora, è vero che non vede l'admin, ma è anche vero che, in condizioni norali, può crearne uno (o modificare il ruolo di un altroin admin) ...


  • User

    Sì, basta cambiare le capabilities. Aspetta che ti cerco la funzione.


  • User

    Anzi, invece di sporcare il codice per gestire le capabilities, prova questo plugin: Capability Manager Enhanced
    gestisce le regole per ogni tipologia di utente.
    🙂


  • User

    @mcrapanzano said:

    Anzi, invece di sporcare il codice per gestire le capabilities, prova questo plugin: Capability Manager Enhanced
    gestisce le regole per ogni tipologia di utente.
    🙂

    Io ho già un plugin per gestire i Ruoli, si chiama "WPFront User Role Editor" ed ho già modificato alcune cose... Farò casino sul Db ad installare anche quello che mi proponi tu? (che fra l'altro, in effetti, leggo nella sua descrizione che dovrebbe farmi gestire questa cosa).

    Sennò benvenga un pezzetto di codice... tanto sto usando un child theme... e il mio functions.php è nel child, al sicuro da riscritture con gli aggiornamenti..


  • User

    Non ti preoccupare non incasini il db con i plugin 🙂 sono fatti per lavorare assieme.
    nella peggiore delle ipotesi lo disinstalli.
    invece se vai a sporcare il codice, devi tenere traccia delle modifiche e un domani ricordarti cosa hai fatto o rischi incompatibilità con nuove versioni di wp.
    ti consiglio di fare una prova con il plugin ;). Se poi non funziona, ti mando due righe 🙂


  • User

    Ti riconsiglio di usare il plugin, ma nel caso ti lascio il codice 🙂
    //prevent editor from deleting, editing, or creating an administrator
    // only needed if the editor was given right to edit users

    class ISA_User_Caps {

    // Add our filters
    function ISA_User_Caps(){
    add_filter( 'editable_roles', array(&$this, 'editable_roles'));
    add_filter( 'map_meta_cap', array(&$this, 'map_meta_cap'),10,4);
    }
    // Remove 'Administrator' from the list of roles if the current user is not an admin
    function editable_roles( $roles ){
    if( isset( $roles['administrator'] ) && !current_user_can('administrator') ){
    unset( $roles['administrator']);
    }
    return $roles;
    }
    // If someone is trying to edit or delete an
    // admin and that user isn't an admin, don't allow it
    function map_meta_cap( $caps, $cap, $user_id, $args ){
    switch( $cap ){
    case 'edit_user':
    case 'remove_user':
    case 'promote_user':
    if( isset($args[0]) && $args[0] == $user_id )
    break;
    elseif( !isset($args[0]) )
    $caps[] = 'do_not_allow';
    $other = new WP_User( absint($args[0]) );
    if( $other->has_cap( 'administrator' ) ){
    if(!current_user_can('administrator')){
    $caps[] = 'do_not_allow';
    }
    }
    break;
    case 'delete_user':
    case 'delete_users':
    if( !isset($args[0]) )
    break;
    $other = new WP_User( absint($args[0]) );
    if( $other->has_cap( 'administrator' ) ){
    if(!current_user_can('administrator')){
    $caps[] = 'do_not_allow';
    }
    }
    break;
    default:
    break;
    }
    return $caps;
    }

    }

    $isa_user_caps = new ISA_User_Caps();


  • User

    Le funzioni isa_ sono nomi casuali dati da un'autrice che avevo trovato sul web (Isa, appunto), quindi rinominale come preferisci.


  • User

    Vado a provare prima i plugin e poi vedo se usare questo codice... Intanto ti ringrazio... 🙂


  • User

    Fammi poi sapere quale soluzione hai adottato 😉


  • User

    Allora ho già fatto un po' prove...
    Ho tolto il plugin che avevo messo io e installato C.M.E., e in functions.php penso di usare il codice relativo al nascondere il nome dell'admin, così sembra tutto più pulito... 🙂

    Davvero grazie mille ancora... Sei stato indispensabile 😉
    ciaooo


  • User

    È stato un piacere 🙂
    comunque : 'stata' non stato 😄
    Se hai bisogno ancora fammi sapere.
    buon lavoro by
    monica


  • User

    Oooops... Scusa, non mi ero accorto "che eri stata" .. 😄
    Alla prossima.. Ciaoo