กลุ่มความสามารถ: ผู้ใช้ที่มีหลายบทบาท


9

ฉันค่อนข้างมั่นใจว่าฉันเข้าใจการตั้งค่าบทบาทและความสามารถใน WordPress: ความสามารถที่ละเอียดมากจัดกลุ่มเข้าด้วยกันในบทบาทที่สามารถกำหนดให้กับผู้ใช้ รหัสควรตรวจสอบความสามารถแบบละเอียดไม่ใช่บทบาท (เนื่องจากความสามารถสำหรับบทบาทเฉพาะสามารถเปลี่ยนแปลงได้) บทบาทไม่จำเป็นต้องเป็นแบบลำดับขั้น (แม้ว่าบทบาทเริ่มต้นคือ)

มีวิธีการกำหนดหลายบทบาทให้กับผู้ใช้หรือไม่? อีกวิธีหนึ่งการมีกลุ่มของความสามารถจำนวนหนึ่งและเชื่อมโยงกลุ่มหนึ่งกลุ่มขึ้นไปกับผู้ใช้ วิธีการที่ไซต์ของฉันทำงานมีความรับผิดชอบที่ชัดเจนจำนวนหนึ่ง: การปรับปรุงหน้าเว็บการดูแลฟอรัมการอัพเดตปฏิทินกิจกรรมและอื่น ๆ ความรับผิดชอบแต่ละอย่างมีกลุ่มของความสามารถที่จำเป็นเพื่อดำเนินงานที่เกี่ยวข้อง ฉันต้องการให้ผู้ใช้ดำเนินการอย่างน้อยหนึ่งความรับผิดชอบ ดังนั้นผู้ใช้ A สามารถอัปเดตหน้าเว็บและปฏิทินกิจกรรม แต่ไม่พอสมควรในฟอรัม (ไม่เกือบจะไหวพริบพอ) แต่ผู้ใช้ B สามารถกลั่นกรองฟอรัมได้อัปเดตปฏิทินกิจกรรม แต่ไม่ได้รับอนุญาตใกล้หน้าเว็บ

ขาดการกำหนดบทบาทสำหรับการรวมกันของความรับผิดชอบที่เป็นไปได้มีวิธีใดในการทำเช่นนี้?


ปลั๊กอิน Scoper บทบาทอาจจะสามารถบรรลุสิ่งที่คุณกำลังมองหา
Devin Humbert

ฉันคิดว่ามันเป็นแบบต่อหน้าหรือต่อโพสต์ซึ่งไม่ใช่สิ่งที่ฉันกำลังมองหา แต่ฉันจะตรวจสอบอีกครั้งขอบคุณ
lpryor

@lpryor - Role Scoper มีหลายตัวเลือกคุณสามารถควบคุมต่อหน้าและต่อโพสต์สำหรับผู้ใช้หรือกลุ่ม แต่ยังตามหมวดหมู่ต่อภาษีและต่อประเภทโพสต์ดังนั้นดูเหมือนว่าคุณสามารถบรรลุสิ่งที่คุณ หลังจากนี้
Milo

ลองอันนี้gist.github.com/nikolov-tmw/7808046เพิ่มช่องทำเครื่องหมายหลายช่องเพื่อเลือกบทบาท
OzzyCzech

คำตอบ:


3

การขาดบทบาท mutiple ทำให้ฉันหงุดหงิดเป็นเวลานานเนื่องจากคลาส 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;
}
*/

แทนที่ set_role ในบรรทัด 83 ด้วย add_role

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

ที่บรรทัด 92 เพิ่มรายการต่อไปนี้ (นี่เป็นเพียงแค่สำเนา & วางที่แก้ไขเบา ๆ จากการดำเนินการโปรโมต - ฉันยังไม่ได้ตรวจสอบเพื่อให้แน่ใจว่าความสามารถในการ Promot_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 ตะขอหรือลืมมัน - กังวล แต่นี่คือ (แม้ว่ามันจะทำงาน) ไม่มีอะไรที่ควรจะแนะนำ
ไกเซอร์

การอัปเดตคอร์ไม่ใช่วิธีปฏิบัติที่ดี ใช้ action / filter hooks แทน
тнє Sufi

3

ปลั๊กอินตัวแก้ไขบทบาทผู้ใช้จัดการหลายบทบาทสำหรับผู้ใช้

เมื่อติดตั้งแล้วผู้ใช้> ภายใต้ผู้ใช้แต่ละคนเป็นตัวเลือกความสามารถ URE ถือว่าบทบาท WP แรกเป็น "บทบาทหลัก" และอนุญาตให้คุณเพิ่ม "บทบาทอื่น"


0

ฉันใช้ปลั๊กอินสมาชิกพร้อมกับความสามารถที่สร้างขึ้นเอง

คุณไม่สามารถกำหนดหลายบทบาทให้กับหนึ่งคน แต่คุณสามารถสร้างบทบาทใด ๆ และระบุความสามารถที่บทบาทนั้นมี

ใน tempaltes คุณสามารถใช้สิ่งที่ต้องการcurrent_user_can ()


ใช่ฉันรู้แล้ว แต่ฉันสงสัยว่ามีวิธีใดที่ไม่จำเป็นต้องกำหนดบทบาทแยกต่างหากสำหรับการผสมผสานความรับผิดชอบที่เป็นไปได้แต่ละอย่าง Combinatorics อาจทำให้ไม่สนุกและมีแนวโน้มที่จะเกิดข้อผิดพลาด
lpryor

ฉันไม่ค่อยพบ Google มากนัก ที่อยู่ใกล้ฉันได้เป็นกระทู้นี้: wordpress.org/support/topic/multiple-roles-for-a-user
Steven
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.