-
Notifications
You must be signed in to change notification settings - Fork 215
Aggiunta blocco modifica profilo utente in base ad una nuova capability #746
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Aggiunta blocco modifica profilo utente in base ad una nuova capability #746
Conversation
ciao @sviluppoRobyone ho provato a replicare la vostra soluzione, ho aggiunto la capacità personalizzata edit_own_profile, ma mi son accorto che non riesco a replicare la vista come riportato nello screen... leggendo inoltre il codice leggo "is_admin() && !current_user_can('edit_own_profile')", cioè per bloccare l'utente, quest'ultimo deve avere un ruolo su wp da admin? forse si potrebbe togliere la condizione is_admin ... ma vorrei maggiori dettagli sul funzionamento grazie |
Avevamo aggiunto is_admin per controllare se siamo nella pagina del pannello di amministrazione, effettivamente potrebbe essere tolto. |
ho dato uno sguardo al vostro codice, e simulato la tipologia di utente... fate una prova con queste righe e ditemi che ne pensate @sviluppoRobyone function block_profile_editing() {
$user = wp_get_current_user();
$user_role = trim($user->roles[0]);
$role = get_role($user_role);
if( (! $role->has_cap( 'edit_own_profile' )) && strpos($_SERVER['REQUEST_URI'], 'profile.php') !== false) {
wp_die(__('Non hai i permessi per modificare il tuo profilo, contatta l\'amministrazione del sito. <br /><a href="index.php">Torna alla bacheca</a>'));
}
}
add_action('admin_init', 'block_profile_editing');
function remove_profile_menu_for_users() {
$user = wp_get_current_user();
$user_role = trim($user->roles[0]);
$role = get_role( $user_role );
if( $role->has_cap( 'edit_own_profile' ) ) {
if (!current_user_can('edit_own_profile')) {
remove_menu_page('profile.php'); // Removes the profile page from the menu
}
}
}
add_action('admin_menu', 'remove_profile_menu_for_users');
function prevent_profile_update($errors, $update, $user) {
$user = wp_get_current_user();
$user_role = trim($user->roles[0]);
$role = get_role( $user_role );
if( $role->has_cap( 'edit_own_profile' ) ) {
if (!$update || !current_user_can('edit_own_profile')) {
$errors->add('no_profile_edit', __('Non hai i permessi per modificare il tuo profilo, contatta l\'amministrazione del sito.'));
}
}
}
add_action('user_profile_update_errors', 'prevent_profile_update', 10, 3); |
Confermo e ringrazio per le correzioni |
@sviluppoRobyone È cambiata proprio la logica del controllo però. |
Abbiamo svolto ulteriori verifiche ed effettivamente il controllo della presenza della capability risultava sempre vero e quindi non veniva più garantita retrocompatibilità. Abbiamo inoltre considerato ora che ci sia la possibilità di più ruoli abbinati all'utente. Ringraziando, attendo nuovo riscontro |
Ma se il controllo di retrocompatibilità viene abbandonato, allora il controllo della capability non sta già tutto in |
Il controllo della retrocompatibilità rimane, nella porzione del codice:
Se per almeno un ruolo è presente quella capability, allora è lecito chiedersi se quell'utente ha o non ha quel permesso. Viene cambiato il metodo di controllo, prima con has_cap() il sistema restituiva falso sia per variabile non settata che settata a false |
I ruoli che vengono controllati però non sono quelli/quello dell'utente corrente? Edit: forse ho capito, davo per scontato che capabilities non fosse popolato sui permessi definiti ma non attivi. |
Confermo che prima della porzione del codice riportato qui nei commenti c'è $user = wp_get_current_user(), quindi:
Vengono controllati tutti e soli i ruoli dell'utente corrente |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Lato feature, mi torna che ci possa essere questo controllo.
Le ultime modifiche introdotte quindi sono da considerarsi finali?
Con il fix ora si può nuovamente inserire gli utenti, ho coperto anche il caso (remoto) in cui un utente può gestire gli utenti ma non può modificare il proprio profilo (giusto per coerenza rispetto al permesso controllato).
Buongiorno, Vi aggiorno, grazie |
Descrizione
In seguito ad una modifica autonoma dei dati della persona da parte di docenti, ci è stato chiesto di inibire la possibilità di modificare il proprio profilo per evitare problemi privacy e correttezza di dati pubblicati.
Dopo vari test per capire se era possibile togliere singoli campi, abbiamo ipotizzato di bloccare l'accesso alla pagina.
Il tutto avviene per i ruoli che non hanno abilitato la capability nuova "edit_own_profile".
Chiediamo anche a voi un riscontro in quanto attualmente, se non c'è la capability, abbiamo tenuto la retrocompabilità lasciando modificare il profilo.
Checklist