क्षमताओं के समूह: कई भूमिकाओं वाले उपयोगकर्ता?


9

मुझे पूरा यकीन है कि मैं वर्डप्रेस में भूमिकाओं और क्षमताओं के सेटअप को समझता हूं: दानेदार क्षमताएं, उन भूमिकाओं में एक साथ समूहीकृत होती हैं जिन्हें उपयोगकर्ताओं को सौंपा जा सकता है। संहिता को बारीक क्षमताओं की जांच करनी चाहिए, न कि भूमिकाओं की (क्योंकि विशेष भूमिकाओं के लिए क्षमताएं बदल सकती हैं)। भूमिकाएं अनिवार्य रूप से श्रेणीबद्ध नहीं हैं (हालांकि डिफ़ॉल्ट भूमिकाएं हैं)।

क्या उपयोगकर्ताओं को कई भूमिकाएँ सौंपने का कोई तरीका है? वैकल्पिक रूप से, क्षमताओं के कई समूह हैं, और एक या एक से अधिक समूह को उपयोगकर्ता के साथ जोड़ना है? मेरी साइट जिस तरह से काम करती है, उसमें कई जिम्मेदारियां हैं: वेब पेज अपडेट करना, मंचों को मॉडरेट करना, घटनाओं के कैलेंडर को अपडेट करना, और इसी तरह। प्रत्येक जिम्मेदारी में क्षमताओं का एक समूह होता है, जिससे जुड़े कार्यों को करने के लिए आवश्यक होती है। मैं एक या अधिक जिम्मेदारियों को निभाने के लिए एक उपयोगकर्ता को सक्षम करना चाहूंगा। इसलिए उपयोगकर्ता A वेब पेज और ईवेंट कैलेंडर को अपडेट कर सकता है, लेकिन फ़ोरम को मॉडरेट नहीं कर सकता है (न ही लगभग पर्याप्त रूप से), लेकिन यूज़र बी, फ़ोरम को मॉडरेट कर सकता है, ईवेंट कैलेंडर को अपडेट कर सकता है, लेकिन वेब पेज के पास इसकी अनुमति नहीं है।

जिम्मेदारियों के प्रत्येक संभावित संयोजन के लिए भूमिका को परिभाषित करने का छोटा, क्या ऐसा करने का कोई तरीका है?


भूमिका Scoper प्लगइन पूरा करने के लिए आप जो खोज रहे हैं सक्षम हो सकते हैं।
डेविन हम्बर्ट

मुझे लगता है कि यह प्रति-पृष्ठ या प्रति-पोस्ट के आधार पर अधिक है, जो वास्तव में मैं क्या देख रहा हूं, नहीं है, लेकिन मैं थोड़ा और जांच करूंगा, धन्यवाद।
lpryor 16

@lpryor - रोल स्कोरर के पास कई विकल्प हैं, आप उपयोगकर्ताओं या समूहों के लिए प्रति-पृष्ठ और प्रति-पोस्ट को नियंत्रित कर सकते हैं, लेकिन प्रति-श्रेणी, प्रति-वर्गीकरण और प्रति-पोस्ट-प्रकार को भी, इसलिए ऐसा लगेगा कि आप वह प्राप्त कर सकते हैं जो आप प्राप्त कर सकते हैं 'इसके साथ फिर से।
मिलो

यह एक आजमाएँ। gith.github.com/nikolov-tmw/7808046 भूमिका चयन में कई चेकबॉक्स जोड़ें
OzzyCeshop

जवाबों:


3

उत्परिवर्ती भूमिकाओं की कमी ने मुझे लंबे समय तक परेशान किया है क्योंकि अंतर्निहित WP_User वर्ग कई भूमिकाओं का समर्थन करता है। मैं भी एक वैकल्पिक सॉफ्टवेयर समाधान की तलाश पर विचार किया है। @lpryor - आपके पोस्ट को पढ़ने के बाद, मुझे इसे स्वयं लागू करने के लिए फिर से प्रेरित किया गया।

हालांकि यह करने के लिए मुझे आश्चर्यजनक रूप से कम संख्या में लाइनें लगीं, क्योंकि मुझे उपयोगकर्ताओं को हैक करना पड़ा है। क्योंकि मेरे लिए यह करने के लिए एक अलग प्लगइन बनाने के लिए मैं बहुत आलसी था। स्पष्ट रूप से ऐसा करने का यह गलत तरीका है कि अगर मैं भविष्य में पर्याप्त प्रेरित हूं, तो मैं इसे ठीक से करने की कोशिश कर सकता हूं।

यदि आपको Wordpress के नवीनतम संस्करण में अपग्रेड करने में सक्षम होने के बारे में परवाह नहीं है (जो आपको चाहिए) - आप नीचे दिए गए कोड स्निपेट्स के साथ कई भूमिकाएं लागू कर सकते हैं। कृपया ध्यान रखें कि मैं एक शब्द विशेषज्ञ नहीं हूं। मैंने केवल प्रासंगिक फाइलें खोलीं और जो कुछ मैं कर रहा था उसके पूर्ण प्रभाव को समझने की कोशिश किए बिना बदलाव किए। कोड मुझे उचित लगता है, लेकिन मैं अपने जीवन के साथ इस पर भरोसा नहीं करता।

(मैं 3.2 का उपयोग कर रहा हूं ताकि आपकी लाइन संख्या अलग-अलग हो सके) कक्षा- 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;
}
*/

Add_role के साथ set_role को 83 की पंक्ति में बदलें

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

92 पंक्ति में निम्नलिखित जोड़ें (यह प्रचार कार्रवाई से केवल एक हल्की संपादित प्रतिलिपि और पेस्ट है - मैंने यह सुनिश्चित करने के लिए जांच नहीं की है कि रोल्स निकालने के लिए प्रमोटर_सुधार क्षमता उपयुक्त है)

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;

यह बहुत अच्छा लग रहा है, @ आदि-नेत्र, बहुत बहुत धन्यवाद! मैं इसके माध्यम से अपना काम करूंगा और इसे आजमाऊंगा।
10

@lpryor अरे, अगर आप WP कोर कोड को हैक किए बिना कई भूमिकाओं को लागू करने में कामयाब रहे तो क्या आप सोच रहे थे? जानकर बहुत अच्छा लगेगा! मुझे कोई प्लगइन्स नहीं मिला, लेकिन एक ही समय में कोर WP कोड हैक करना नहीं चाहिए। धन्यवाद!
दशालुण

@ दशालुना मैं अभी तक इसके लिए सक्षम नहीं हुआ, लेकिन यह मेरी सूची में सबसे ऊपर है!
lpryor

5
इस तरह हैकिंग कोर जाने का रास्ता नहीं है। यह वर्डप्रेस कोर के किसी भी अपडेट पर हटा दिया जाएगा । इसे हुक करें या इसे भूल जाएं -sorry, लेकिन यह है (भले ही यह काम करता है) कुछ भी नहीं जिसकी सिफारिश की जानी चाहिए।
कैसर

कोर को अपडेट करना अच्छा अभ्यास नहीं है। इसके बजाय एक्शन / फिल्टर हुक का उपयोग करें।
тн

3

उपयोगकर्ता भूमिका संपादक प्लगइन एक उपयोगकर्ता के लिए कई भूमिकाएं संभालता है।

एक बार स्थापित होने के बाद, प्रत्येक उपयोगकर्ता के तहत उपयोगकर्ता> क्षमता विकल्प हैं। URE पहली WP भूमिका को "प्राथमिक भूमिका" मानता है और आपको "अन्य भूमिकाएँ" जोड़ने की अनुमति देता है।


0

मैं कस्टम निर्मित क्षमताओं के साथ सदस्य प्लगइन का उपयोग करता हूं ।

आप एक व्यक्ति को कई भूमिकाएँ नहीं दे सकते, लेकिन आप कोई भी भूमिका बना सकते हैं और निर्दिष्ट कर सकते हैं कि उस भूमिका में क्या क्षमताएं हैं।

टेम्प्लेट में, आप current_user_can () जैसी किसी चीज़ का उपयोग कर सकते हैं ।


हाँ मुझे एहसास है कि लेकिन मैं सोच रहा था कि क्या जिम्मेदारियों के प्रत्येक संभावित संयोजन के लिए एक अलग भूमिका को परिभाषित न करने का कोई तरीका है। कॉम्बीनेटरिक्स इसे बहुत मज़ेदार नहीं बना सकता है और त्रुटि के लिए प्रवण हो सकता है।
lpryor 16

मुझे ज्यादा गोगलिंग नहीं मिली। निकटतम मुझे यह थ्रेड मिला: wordpress.org/support/topic/multiple-roles-for-a-user
स्टीवन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.