Permitir que os autores editem apenas determinados usuários

4

Estou tentando dar aos meus "autores" (que eu renomei como "capitães") a capacidade de acessar o perfil de usuário dos membros de sua equipe e apenas dos membros de sua equipe. As equipes são definidas por uma caixa meta-usuário (isso funciona melhor do que uma taxonomia de usuário para o restante do projeto). Os autores receberam a capacidade edit_users .

Eu estava pensando que poderia fazer algo assim:

add_action('user_row_actions','captains_user_row_actions',10,2);

function captains_user_row_actions($actions, $user_object) {  // remove the ability to edit a non-team-member
$current_user = wp_get_current_user();
$cap_team_id = get_user_meta($current_user->ID, 'team-meta', true);
$user_team_id = get_user_meta($user_object->ID, 'team-meta', true);    

global $pagenow;
if ($pagenow=='users.php' && isset($user_object->caps['author']) &&  $cap_team_id != $user_team_id )
unset($actions['edit']);

return $actions;
}

Ou este não é o caminho a percorrer. Ou estou perdendo alguma coisa.

    
por mantis 05.07.2013 / 15:23

1 resposta

1

Eu não testei o código a seguir , mas ele deve fazer o que você quer (ou apontar você na direção certa, pelo menos).

function captains_user_row_actions($actions, $user) {
    // remove the ability to edit a non-team-member
    $cap_team_id = get_user_meta(wp_get_current_user()->ID, 'team-meta', true);
    $user_team_id = get_user_meta($user->ID, 'team-meta', true);
    if ('users.php' === $GLOBALS['pagenow'] && $cap_team_id !== $user_team_id)
        unset($actions['edit']);

    return $actions;
}
add_action('user_row_actions', 'captains_user_row_actions', 10, 2);

// EDITAR
Adicione o seguinte ao seu arquivo functions.php para também processar edição direta :

function my_captain_func() {
    $cap_team_id = get_user_meta(wp_get_current_user()->ID, 'team-meta', true);
    $user_team_id = get_user_meta($_GET['user_id'], 'team-meta', true);
    if ($cap_team_id !== $user_team_id && ! current_user_can('edit_pages')) {
        wp_redirect(admin_url());   // or wherever you like
        exit;
    }
}   
if ('user-edit.php' === $GLOBALS['pagenow'])
    add_action('wp_loaded', 'my_captain_func');
    
por tfrommen 05.07.2013 / 19:36