Yetenek grupları: birden fazla rolü olan kullanıcılar?


9

WordPress'deki rolleri ve yetenekleri anladığımdan eminim: granüler yetenekler, kullanıcılara atanabilecek rollerde gruplandırılmış. Kod, rolleri değil parçalı yetenekleri kontrol etmelidir (çünkü belirli roller için yetenekler değişebilir). Roller mutlaka hiyerarşik değildir (varsayılan roller olsa da).

Kullanıcılara birden fazla rol atamanın bir yolu var mı? Alternatif olarak, bir dizi yetenek grubuna sahip olmak ve bir veya daha fazla grubu bir kullanıcıyla ilişkilendirmek mi? Sitemin çalışma şekliyle ilgili çok sayıda sorumluluk vardır: web sayfalarını güncelleme, forumları denetleme, etkinlik takvimini güncelleme vb. Her sorumluluk, kendisiyle ilişkili görevleri yerine getirmek için gereken bir grup yeteneğe sahiptir. Bir kullanıcının bir veya daha fazla sorumluluk yerine getirmesini sağlamak istiyorum. Böylece A kullanıcısı web sayfalarını ve etkinlik takvimini güncelleyebilir ancak forumları denetleyemez (neredeyse yeterince dokunulmaz değil), ancak B kullanıcısı forumları denetleyebilir, etkinlik takvimini güncelleyebilir, ancak web sayfalarının yakınında izin verilmez.

Sorumlulukların her olası kombinasyonu için bir rol tanımlamaktan yoksun, bunu yapmanın bir yolu var mı?


Rol Scoper eklentisi size aradığınızı başarmak mümkün olabilir.
Devin Humbert

Sanırım bu daha çok sayfa başına veya yazı başına temelinde, aradığım şey bu değil, ama biraz daha araştıracağım, teşekkürler.
lpryor

@lpryor - Rol Scoper'ın birden fazla seçeneği vardır, kullanıcılar veya gruplar için sayfa başına ve yayın başına kontrol edebilirsiniz, aynı zamanda kategori başına, sınıflandırma başına ve tür başına yazıyı da kontrol edebilirsiniz. bunun peşindeyiz.
Milo

Bunu deneyin gist.github.com/nikolov-tmw/7808046 Rol seçimine birden fazla onay kutusu ekleyin
OzzyCzech

Yanıtlar:


3

Temel WP_User sınıfı birden çok rolü desteklediğinden, birden fazla rolün olmaması beni uzun süre rahatsız etti. Alternatif bir yazılım çözümü aramayı bile düşündüm. @lpryor - yazınızı okuduktan sonra, kendim uygulamak için yeniden motive oldum.

Benim için ayrı bir eklenti oluşturmak için çok tembel olduğum için users.php dosyasını kesmek zorunda kalmama rağmen, satırları şaşırtıcı derecede kısa sürdü. Açıkçası bu yapmanın yanlış yolu bu yüzden gelecekte yeterince motive olursam, doğru şekilde yapmaya çalışabilirim.

Wordpress'in en son sürümüne yükseltmeyi umursamıyorsanız (yapmanız gerekir) - aşağıdaki kod parçacıklarıyla birden fazla rol uygulayabilirsiniz. Wordpress uzmanı olmadığımı lütfen unutmayın. İlgili dosyaları açtım ve yaptığımın tam sonuçlarını anlamaya çalışmadan değişiklikleri yaptım. Kod benim için makul görünüyor ama hayatım boyunca buna güvenmem.

(3.2 kullanıyorum, böylece satır numaralarınız değişebilir) class-wp-users-list-table.php satır 150'den hemen önce aşağıdaki gibi bazı ekleyin:

<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>

sonra current_account işlevini aşağıdaki gibi görünecek şekilde değiştirin

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();

}

Şimdi users.php Yorum satırları 71-76

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

83. satırdaki set_role öğesini add_role ile değiştirin

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

Satır 92'de aşağıdakileri ekleyin (Bu, yalnızca tanıtım işleminden hafifçe düzenlenmiş bir kopyala yapıştırdır - promers_user özelliğinin rolleri kaldırmak için uygun olup olmadığını kontrol etmedim)

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 satırında aşağıdakileri ekleyin

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

Harika görünüyor @ adi-eyal, çok teşekkürler! Ben yolumdan çalışacağım ve deneyeceğim.
lpryor

@lpryor hey, sadece WP çekirdek kodunu hacklemeden birden fazla rol uygulamayı başarabiliyor musunuz? Bilmek harika olurdu! Herhangi bir eklenti bulamadım, ancak aynı zamanda çekirdek WP kodunu kesmek istemiyorum. Teşekkürler!
dashaluna

@dashaluna Buna henüz ulaşamadım, ancak listemin en üstüne yaklaşıyor!
lpryor

5
Çekirdeği böyle kesmek hadi yol değil. Bu , WordPress çekirdeğinin herhangi bir güncellemesinde kaldırılacaktır . Bağla ya da unut - üzgünüm, ama bu (işe yarasa bile) tavsiye edilmesi gereken bir şey değil.
Kaiser

Çekirdeği güncellemek iyi bir uygulama değildir. Bunun yerine işlem / filtre kancalarını kullanın.
тнє Sufi

3

User Role Editor eklentisi , bir kullanıcı için birden fazla rolü yönetir.

Yüklendikten sonra, her kullanıcının altındaki Kullanıcılar> Yetenekler seçeneğidir. URE ilk WP rolünü "birincil rol" olarak görür ve "diğer roller" eklemenize izin verir.


0

Üyeler eklentisini özel oluşturulan özelliklerle birlikte kullanıyorum .

Bir kişiye birden fazla rol atayamazsınız, ancak herhangi bir rol oluşturabilir ve rolün hangi yeteneklere sahip olduğunu belirleyebilirsiniz.

Şablonlarda, current_user_can () gibi bir şey kullanabilirsiniz .


Evet bunun farkındayım. Ancak, her olası sorumluluk kombinasyonu için ayrı bir rol tanımlamak zorunda kalmanın bir yolu olup olmadığını merak ediyordum. Kombinatorikler çok eğlenceli ve hataya eğilimli olmayabilir.
lpryor

Çok fazla Google'ı bulamadım. En yakın ben bu konu oldu: wordpress.org/support/topic/multiple-roles-for-a-user .
Steven
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.