기능 그룹 : 여러 역할을 가진 사용자?


9

필자는 WordPress의 역할 및 기능 설정 : 사용자에게 할당 할 수있는 역할별로 그룹화 된 세분화 된 기능을 이해하고 있다고 확신합니다. 코드는 역할이 아닌 세분화 된 기능을 확인해야합니다 (특정 역할의 기능이 변경 될 수 있기 때문에). 역할이 반드시 계층적일 필요는 없습니다 (기본 역할은 아니지만).

사용자에게 여러 역할을 할당 할 수있는 방법이 있습니까? 또는 여러 기능 그룹이 있고 하나 이상의 그룹을 사용자에게 연결합니까? 내 사이트가 작동하는 방식에는 웹 페이지 업데이트, 포럼 운영, 이벤트 일정 업데이트 등 여러 가지 명백한 책임이 있습니다. 각 책임에는 관련 작업을 수행하는 데 필요한 기능 그룹이 있습니다. 사용자가 하나 이상의 책임을 수행 할 수 있도록하려고합니다. 따라서 사용자 A는 웹 페이지 및 이벤트 일정을 업데이트 할 수 있지만 포럼을 조정하지는 못하지만 (거의 충분하지는 않음) 사용자 B는 포럼을 조정하고 이벤트 일정을 업데이트 할 수 있지만 웹 페이지 근처에서는 허용되지 않습니다.

각각의 가능한 책임 조합에 대한 역할을 정의하는 데 부족한데이를 수행 할 방법이 있습니까?


역할 Scoper 플러그인은 당신이 찾고있는 무엇을 달성 할 수 있습니다.
Devin Humbert

나는 그것이 페이지 당 또는 게시물별로 더 많은 것으로 생각합니다. 실제로 내가 찾고있는 것이 아니지만 조금 더 조사 할 것입니다. 감사합니다.
lpryor

@lpryor-Role Scoper에는 여러 가지 옵션이 있으며 사용자 또는 그룹의 페이지 별 및 게시물별로 제어 할 수 있지만 카테고리, 택 소노 미 및 게시물별로 유형을 제어 할 수 있으므로 원하는 것을 달성 할 수있을 것 같습니다. '이 후.
Milo

gist.github.com/nikolov-tmw/7808046가지 사용해보십시오. 역할 선택에 여러 개의 확인란 추가
OzzyCzech

답변:


3

기본 WP_User 클래스가 여러 역할을 지원하기 때문에 여러 역할이 없기 때문에 오랫동안 자극을 받았습니다. 대체 소프트웨어 솔루션을 찾는 것도 고려했습니다. @lpryor-게시물을 읽은 후 직접 구현하도록 동기를 부여했습니다.

사용자를 위해 별도의 플러그인을 만들기에는 너무 게으 르기 때문에 users.php 파일을 해킹해야했지만 놀랍게도 짧은 줄이 필요했습니다. 분명히 이것이 잘못된 방법입니다. 향후에 충분한 동기가 있다면 올바르게 시도 할 수 있습니다.

최신 버전의 Wordpress (필수)로 업그레이드하지 않아도되는 경우 아래 코드 조각으로 여러 역할을 구현할 수 있습니다. 저는 워드 프레스 전문가가 아닙니다. 방금 관련 파일을 열고 내가하고있는 일의 전체 의미를 이해하려고 시도하지 않고 변경했습니다. 코드는 나에게 합리적으로 보이지만 내 인생에서 그것을 신뢰하지는 않을 것입니다.

(3.2를 사용하고 있으므로 줄 번호가 다를 수 있습니다) class-wp-users-list-table.php에서 150 줄 바로 앞에 다음과 같이 추가하십시오.

<div class="alignleft actions">
    <label class="screen-reader-text" for="remove_role"><?php _e( 'Remove role &hellip;' ) ?></label>
    <select name="remove_role" id="remove_role">
        <option value=''><?php _e( 'Remove role &hellip;' ) ?></option>
        <?php wp_dropdown_roles(); ?>
    </select>
    <?php submit_button( __( 'Remove' ), 'secondary', 'changeit', false ); ?>
</div>

그런 다음 current_account 함수를 다음과 같이 변경하십시오.

function current_action() {
    if ( isset($_REQUEST['changeit']) ) {
        if ( !empty($_REQUEST['new_role']) )
            return 'promote';
        elseif ( !empty($_REQUEST['remove_role']) )
            return 'remove_role';
    }

    return parent::current_action();

}

이제 users.php에서 라인 71-76을 주석 처리하십시오.

/*
if ( $id == $current_user->ID && !$wp_roles->role_objects[$_REQUEST['new_role']]->has_cap('promote_users') ) {
    $update = 'err_admin_role';
    continue;
}
*/

83 행에서 set_role을 add_role로 바꾸십시오.

$user->add_role($_REQUEST['new_role']);

92 행에 다음을 추가하십시오 (이것은 승격 조치에서 약간 편집 된 사본 및 붙여 넣기입니다. promote_user 기능이 역할을 제거하기에 적합한 지 확인하지 않았습니다).

case 'remove_role':
    check_admin_referer('bulk-users');

    if ( ! current_user_can( 'promote_users' ) )
            wp_die( __( 'You can&#8217;t edit that user.' ) );

    if ( empty($_REQUEST['users']) ) {
            wp_redirect($redirect);
            exit();
    }

    $editable_roles = get_editable_roles();
    if ( empty( $editable_roles[$_REQUEST['remove_role']] ) )
            wp_die(__('You can&#8217;t remove that role'));

    $userids = $_REQUEST['users'];
    $update = 'remove_role';
    foreach ( $userids as $id ) {
            $id = (int) $id;

            if ( ! current_user_can('promote_user', $id) )
                    wp_die(__('You can&#8217;t edit that user.'));
            // The new role of the current user must also have promote_users caps
            // Need to think this through
            /*
            if ( $id == $current_user->ID && !$wp_roles->role_objects[$_REQUEST['new_role']]->has_cap('promote_users') ) {
                    $update = 'err_admin_role';
                    continue;
            }
            */

            // If the user doesn't already belong to the blog, bail.
            if ( is_multisite() && !is_user_member_of_blog( $id ) )
                    wp_die(__('Cheatin&#8217; uh?'));

            $user = new WP_User($id);
            $user->remove_role($_REQUEST['remove_role']);
    }

    wp_redirect(add_query_arg('update', $update, $redirect));
    exit();

370 행에서 다음을 추가하십시오.

case 'remove_role':
    $messages[] = '<div id="message" class="updated"><p>' . __('Removed role.') . '</p></div>';
    break;

@ adi-eyal, 정말 감사합니다! 나는 그것을 통해 내 방식대로 노력하고 그것을 시도합니다.
lpryor

@lpryor 안녕하세요, WP 핵심 코드를 해킹하지 않고 여러 역할을 구현할 수 있는지 궁금하십니까? 알아두면 좋을 것입니다! 플러그인을 찾을 수 없지만 동시에 핵심 WP 코드를 해킹하고 싶지 않습니다. 감사!
dashaluna

@dashaluna 나는 아직 이것을 얻을 수 없었지만 내 목록의 최상위에 가까워지고있다!
lpryor

5
이와 같은 해킹 코어 는 갈 길이 아닙니다. 이것은 모든 WordPress 코어 업데이트 에서 제거됩니다 . 미안하지만 잊어 버려도 좋지만 (작동하더라도) 권장되는 것은 없습니다.
카이저

핵심 업데이트는 좋은 습관이 아닙니다. 대신 액션 / 필터 후크를 사용하십시오.
тнє Sufi


0

멤버 플러그인 을 사용자 정의 생성 기능과 함께 사용 합니다.

한 사람에게 여러 역할을 할당 할 수는 없지만 역할을 생성하고 해당 역할의 기능을 지정할 수 있습니다.

tempaltes에서 current_user_can () 과 같은 것을 사용할 수 있습니다 .


예, 알고 있습니다. 그러나 각 가능한 책임 조합에 대해 별도의 역할을 정의 할 필요가없는 방법이 있는지 궁금했습니다. 조합 기술을 사용하면 재미없고 오류가 발생하기 쉽습니다.
lpryor

나는 많은 인터넷 검색을 찾지 못했습니다. 내가 얻은 가장 가까운 것은이 스레드입니다 : wordpress.org/support/topic/multiple-roles-for-a-user .
Steven
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.