Rumah > Tutorial CMS > WordTekan > Menguasai peranan dan keupayaan WordPress

Menguasai peranan dan keupayaan WordPress

Christopher Nolan
Lepaskan: 2025-02-16 11:49:08
asal
356 orang telah melayarinya

Pengurusan Pengguna WordPress: Analisis mendalam tentang peranan dan keizinan

sistem pengurusan pengguna WordPress adalah berdasarkan peranan dan keizinan. Peranan adalah entiti yang mengandungi nama yang unik dan satu set keizinan, yang masing-masing mentakrifkan tahap akses kepada ciri-ciri khusus platform peranan tersebut. Mari kita menggali mekanisme kerja peranan dan keizinan WordPress.

mata utama

  • Pengurusan Pengguna WordPress adalah berdasarkan peranan dan keizinan. Peranan mempunyai nama yang unik dan satu set keizinan yang menentukan tahap akses kepada ciri -ciri yang berbeza dari platform dengan peranan.
  • WordPress menyediakan API yang komprehensif untuk menyesuaikan peranan dan keizinan mereka. Fungsi seperti add_role(), remove_role(), add_cap(), dan remove_cap() boleh digunakan untuk menguruskan peranan dan keizinan. Walau bagaimanapun, anda mesti memberi perhatian kepada akses dan prestasi pangkalan data apabila menggunakan fungsi ini.
  • Terdapat beberapa cara untuk mengelakkan isu pangkalan data apabila berurusan dengan peranan dan keizinan. Salah satu cara adalah untuk mencetuskan kod hanya apabila plugin diaktifkan, anda boleh menggunakan fungsi register_activation_hook(). Cara lain ialah memintas pangkalan data WordPress dengan menetapkan pembolehubah global $wp_user_roles.

kembali ke mekanisme adegan

Penyimpanan Peranan

Peranan lalai dan senarai kebenaran boleh didapati di WordPress Codex.

Pangkalan data

menyimpan senarai ini dalam jadual

. wp_options

Ia menggunakan kekunci Serialized

. wp_user_roles

Data deserialized adalah seperti berikut: Mastering WordPress Roles and Capabilities

<code>array(
    'administrator' => array(
        'name'         => '管理员',
        'capabilities' => array(
            'switch_themes'          => true,
            'edit_themes'            => true,
            'activate_plugins'       => true,
            'edit_plugins'           => true,
            'edit_users'             => true,
            // [...]
        )
    ),
    'contributor' => array(
        'name'         => '投稿者',
        'capabilities' => array(
            'delete_pages'           => true,
            'delete_others_pages'    => true,
            'delete_published_pages' => true,
            'delete_posts'           => true,
            // [...]
        )
    ),
    // [...]
);</code>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Metadata ini ditetapkan secara automatik apabila tapak WordPress baru dipasang.

Apabila WordPress bermula, kelas

memuatkan senarai dari pangkalan data.

WP_Roles Ini berlaku antara cangkuk

dan

. plugins_loaded init Pautan pengguna ke peranan

WordPress menggunakan

disimpan dalam jadual

untuk menghubungkan pengguna ke peranan mereka. wp_usermeta meta_key

Selepas deserialization, metadata adalah seperti berikut:

Mastering WordPress Roles and Capabilities

Perhatikan bahawa WordPress menggunakan tatasusunan, walaupun pengguna hanya boleh mempunyai satu peranan pada satu masa, kita akan melihat mengapa kemudian.
<code>array(
    'administrator' => true
)</code>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Juga, ingat

adalah awalan blog semasa.

wp_ (kita boleh menggunakannya menggunakan fungsi

).

$GLOBALS['wpdb']->get_blog_prefix() Dalam pemasangan pelbagai tapak, ini membolehkan pengguna menggunakan peranan yang berbeza dalam keadaan yang berbeza:

    = & gt;
  • wp_capabilities = & gt; a:1:{s:13:"administrator";b:1;}
  • = & gt;
  • wp_10_capabilities a:1:{s:11:"contributor";b:1;}
  • Peraturan ini juga terpakai pada entri
  • yang kita lihat dalam jadual wp_15_capabilities. a:1:{s:10:"subscriber";b:1;}

    Akhirnya, kita dapat melihat metadata wp_user_level serta peranannya.

    Ia digunakan untuk berurusan dengan watak -watak dalam versi lama WordPress dan kini ditolak.

    Gunakan kebenaran dalam kod teras

    Kami telah belajar bagaimana peranan dimuatkan dan dihubungkan dengan pengguna;

    Beberapa Kebenaran Lalai adalah Hardcoded dalam Kod Teras WordPress.

    Contohnya, apabila skrin plugin dimuatkan, ia akan menyemak sama ada pengguna semasa boleh menguruskan plugin dengan menjalankan kod berikut:

    <code>array(
        'administrator' => array(
            'name'         => '管理员',
            'capabilities' => array(
                'switch_themes'          => true,
                'edit_themes'            => true,
                'activate_plugins'       => true,
                'edit_plugins'           => true,
                'edit_users'             => true,
                // [...]
            )
        ),
        'contributor' => array(
            'name'         => '投稿者',
            'capabilities' => array(
                'delete_pages'           => true,
                'delete_others_pages'    => true,
                'delete_published_pages' => true,
                'delete_posts'           => true,
                // [...]
            )
        ),
        // [...]
    );</code>
    Salin selepas log masuk
    Salin selepas log masuk
    Salin selepas log masuk
    Peranan tidak pernah dikodkan;

    Menggunakan Peranan dan Kebenaran: WordPress Api

    ACI API

    WordPress menyediakan fungsi global berikut untuk membantu kami mengendalikan peranan.

    current_user_can() Periksa sama ada pengguna semasa mempunyai keizinan yang diperlukan.

    <code>array(
        'administrator' => true
    )</code>
    Salin selepas log masuk
    Salin selepas log masuk
    Salin selepas log masuk

    Semak sama ada pengguna tertentu mempunyai kebenaran. WP_User::has_cap

    kita dapat melihat bahawa

    menggunakan fungsi ini.
    <code>if (!current_user_can('activate_plugins'))
    {
        wp_die(__('您没有足够的权限来管理此站点的插件。'));
    }</code>
    Salin selepas log masuk
    Salin selepas log masuk

    current_user_can

    kembali ke peranan yang boleh diedit.

    get_editable_roles()

    Senarai ini boleh ditulis semula oleh penapis

    , jadi kita tidak boleh bergantung pada fungsi ini untuk mendapatkan senarai penuh peranan di laman web.

    <code>add_action('init', function()
    {
        if (current_user_can('install_plugins'))
        {
            echo '您可以安装插件';
        }
        else
        {
            echo '您不能安装插件';
        }
    });</code>
    Salin selepas log masuk
    Salin selepas log masuk
    Sila ambil perhatian penggunaan cangkuk

    , kerana fungsi itu belum dimuatkan dalam cangkuk editable_roles lagi.

    admin_init init GET Objek Berdasarkan slugnya.

    get_role()

    Periksa sama ada peranan mempunyai keizinan yang diperlukan. WP_Role

    <code>add_action('init', function()   
    {
        $user = get_user_by('slug', 'admin');
        if ($user->has_cap('install_plugins'))
        {
            echo '管理员可以安装插件';
        }
        else
        {
            echo '管理员不能安装插件';
        }
    });</code>
    Salin selepas log masuk
    Salin selepas log masuk
    Api Custom

    WP_Role::has_cap() WordPress juga menyediakan API lengkap untuk menyesuaikan peranan dan keizinan mereka.

    <code>add_action('admin_init', function()
    {
        $roles = get_editable_roles();
        var_dump($roles);
    });</code>
    Salin selepas log masuk
    Salin selepas log masuk
    Daftar peranan baru dalam pangkalan data.

    Jika hadir, padamkan peranan yang diperlukan dari pangkalan data. add_role()

    <code>add_action('init', function()
    {
        $role = get_role('administrator');
        var_dump($role);
    });
    
    // 这将打印:
    // WP_Role 对象
    // (
    //     [name] => administrator
    //     [capabilities] => Array
    //         (
    //             [switch_themes] => 1
    //             [edit_themes] => 1
    //             [activate_plugins] => 1
    //             [edit_plugins] => 1
    //             [...]</code>
    Salin selepas log masuk
    Salin selepas log masuk
    Tambah keizinan kepada peranan.

    remove_role()

    Ini boleh menjadi kebenaran teras (

    ,

    ...) atau mana -mana rentetan tersuai (
    <code>add_action('init', function()
    {
        $role = get_role('administrator');
        var_dump($role->has_cap('install_plugins')); // 打印 TRUE
    });</code>
    Salin selepas log masuk
    Salin selepas log masuk
    ).

    WP_Role::add_cap() Ia membolehkan kami mendaftar sebanyak mungkin kebenaran tersuai untuk plugin kami.

    <code>add_action('init', function()
    {
        add_role('plugins_manager', '插件管理员', array(
            'install_plugins',
            'activate_plugins',
            'edit_plugins'
        ));
    });</code>
    Salin selepas log masuk
    Jika wujud, padamkan keizinan dari peranan.

    install_plugins edit_posts my_awesome_plugin_cap

    Tambah peranan kepada pengguna yang diberikan.

    Fungsi ini membolehkan anda secara teorinya menetapkan pelbagai peranan untuk pengguna yang sama. WP_Role::remove_cap()

    Oleh kerana backend WordPress hanya memaparkan dan menguruskan satu peranan setiap pengguna, kita tidak boleh menambah banyak peranan untuk pengguna dan harus sentiasa menggunakan

    sebelum menambah peranan baru.

    <code>add_action('init', function()
    {
        remove_role('plugins_manager');
    });</code>
    Salin selepas log masuk

    WP_User::add_role() Keluarkan peranan dari pengguna yang diberikan.

    <code>add_action('init', function()
    {
        $role = get_role('contributor');
        $role->add_cap('install_plugins');
    });</code>
    Salin selepas log masuk

    Tambah keizinan kepada pengguna yang diberikan.

    <code>array(
        'administrator' => array(
            'name'         => '管理员',
            'capabilities' => array(
                'switch_themes'          => true,
                'edit_themes'            => true,
                'activate_plugins'       => true,
                'edit_plugins'           => true,
                'edit_users'             => true,
                // [...]
            )
        ),
        'contributor' => array(
            'name'         => '投稿者',
            'capabilities' => array(
                'delete_pages'           => true,
                'delete_others_pages'    => true,
                'delete_published_pages' => true,
                'delete_posts'           => true,
                // [...]
            )
        ),
        // [...]
    );</code>
    Salin selepas log masuk
    Salin selepas log masuk
    Salin selepas log masuk

    Mastering WordPress Roles and Capabilities Ini sangat berguna jika kita mahu menambah kebenaran tunggal kepada pengguna tanpa perlu membuat peranan penuh.

    WP_User::remove_cap()

    Keluarkan kebenaran dari pengguna yang diberikan.

    <code>array(
        'administrator' => true
    )</code>
    Salin selepas log masuk
    Salin selepas log masuk
    Salin selepas log masuk
    Beberapa isu dengan WordPress API

    Selain daripada satu soalan, fungsi yang kita lihat kelihatan baik: Akses dan prestasi pangkalan data.

    Apa yang kita fokuskan pada ketika berurusan dengan peranan dan keizinan adalah ketika

    harus kod kita dicetuskan? Untuk menjelaskan ini, mari kita lihat kod teras WordPress.

    Pertama, kami ingin menambah watak kosong baru:

    Berikut adalah beberapa baris pertama fungsi
    <code>if (!current_user_can('activate_plugins'))
    {
        wp_die(__('您没有足够的权限来管理此站点的插件。'));
    }</code>
    Salin selepas log masuk
    Salin selepas log masuk
    (sebenarnya diarahkan ke

    ): add_role WP_Roles::add_role

    Jika kita menambah peranan baru, fungsi
    <code>add_action('init', function()
    {
        if (current_user_can('install_plugins'))
        {
            echo '您可以安装插件';
        }
        else
        {
            echo '您不能安装插件';
        }
    });</code>
    Salin selepas log masuk
    Salin selepas log masuk
    berjalan sekali dan kemudian tidak melakukan apa -apa.

    add_role Seterusnya, katakan kami ingin menambah keizinan kepada peranan kami yang baru dibuat:

    fungsi
    <code>add_action('init', function()   
    {
        $user = get_user_by('slug', 'admin');
        if ($user->has_cap('install_plugins'))
        {
            echo '管理员可以安装插件';
        }
        else
        {
            echo '管理员不能安装插件';
        }
    });</code>
    Salin selepas log masuk
    Salin selepas log masuk
    dalam WordPress 4.2.2 adalah seperti berikut:

    WP_Role::add_cap()

    Ia mengemas kini objek
    <code>add_action('admin_init', function()
    {
        $roles = get_editable_roles();
        var_dump($roles);
    });</code>
    Salin selepas log masuk
    Salin selepas log masuk
    , tetapi kita juga dapat melihat bahawa pangkalan data akan mengemas kini setiap kali kod kami berjalan, walaupun keizinan baru kami sudah didaftarkan!

    $this->roles Ini bermakna jika kita mengambil berat tentang prestasi, semua kod yang kita tulis untuk peranan dan keizinan tersuai tidak boleh dijalankan apabila setiap halaman dimuatkan. Penyelesaian

    Terdapat beberapa cara untuk mengelakkan masalah pangkalan data ini.

    Aktifkan dengan plug-in

    WordPress membolehkan penulis plugin menggunakan fungsi

    untuk mencetuskan kod apabila plugin diaktifkan di backend.

    mari kita buat plugin sampel:

    register_activation_hook()

    Kod ini hanya akan dijalankan sekali apabila plugin diaktifkan di laman web.

    Sekarang, kita harus ingat bahawa penyelesaian ini bergantung kepada pengaktifan dan penyahaktifan plugin.
    <code>add_action('init', function()
    {
        $role = get_role('administrator');
        var_dump($role);
    });
    
    // 这将打印:
    // WP_Role 对象
    // (
    //     [name] => administrator
    //     [capabilities] => Array
    //         (
    //             [switch_themes] => 1
    //             [edit_themes] => 1
    //             [activate_plugins] => 1
    //             [edit_plugins] => 1
    //             [...]</code>
    Salin selepas log masuk
    Salin selepas log masuk

    Apa yang berlaku jika plugin sudah dalam pengeluaran, atau jika reaktivasi ditinggalkan apabila kemas kini ditolak?

    Malah, penyelesaian ini juga bergantung pada pangkalan data dan memerlukan langkah tambahan apabila menolak kod.

    Bypass WordPress Database

    Terdapat juga penyelesaian yang tidak didedahkan yang berfungsi dengan baik dalam beberapa kes.

    mari kita lihat kod teras WordPress pada akhir, apabila objek

    memuatkan peranan dari pangkalan data apabila WordPress bermula:

    cek WordPress untuk pembolehubah global WP_Roles sebelum mendapatkan data dari pangkalan data.

    <code>add_action('init', function()
    {
        $role = get_role('administrator');
        var_dump($role->has_cap('install_plugins')); // 打印 TRUE
    });</code>
    Salin selepas log masuk
    Salin selepas log masuk
    Jika ditetapkan, WordPress akan menggunakan kandungannya dan menyekat penggunaan pangkalan data dengan menetapkan pembolehubah

    kepada palsu. $wp_user_roles

    mari kita cuba, hanya menyimpan peranan pentadbir yang baru dan terhad:

    $this->use_db

    Apabila memuatkan backend, kita dapat melihat bahawa ia mengekalkan definisi peranan tersuai kami:

    Mastering WordPress Roles and Capabilities Penyelesaian ini menyelesaikan masalah pangkalan data, tetapi mungkin memperkenalkan beberapa isu lain:

    • Plugin menggunakan API asli mungkin tidak berfungsi dengan betul.
    • kita perlu menetapkan definisi setiap peranan secara manual, walaupun untuk peranan yang kita tidak mahu berubah.
    Walau bagaimanapun, ini mungkin merupakan penyelesaian yang berdaya maju apabila membina aplikasi WordPress tersuai yang memerlukan senarai tersuai peranan statik:

      Definisi peranan boleh dikira dengan kod.
    • Pusing kod baru ke persekitaran secara automatik akan mengemas kini definisi secara automatik.
    • tidak perlu mempertimbangkan isu pangkalan data lagi.
    Kesimpulan

    Dalam artikel ini, saya memperkenalkan gambaran keseluruhan peranan dan penggunaan keizinan di WordPress.

    Walaupun API lengkapnya membolehkan kita melakukan hampir apa sahaja yang kita mahu, hubungan dengan pangkalan data masih menjadi masalah utama.

    kita mesti ingat ini apabila membangunkan plugin dan tema kita.

    Apa pendapat anda tentang cara WordPress menguruskan peranan? Nantikan maklum balas anda!

    soalan yang sering ditanya mengenai menguasai peranan dan keizinan WordPress

    Apakah peranan pengguna lalai dalam WordPress? Apakah keizinan mereka?

    WordPress mempunyai enam peranan pengguna lalai: Pentadbir Super, Pentadbir, Editor, Pengarang, Penyumbang, dan Pelanggan. Setiap peranan mempunyai set kebenaran tertentu. Sebagai contoh, pentadbir super boleh mengakses semua ciri pentadbiran pelbagai laman web. Pentadbir boleh melaksanakan semua tugas pentadbiran di satu laman web. Editor boleh menerbitkan dan menguruskan jawatan, termasuk pengguna lain. Penulis boleh menyiarkan dan menguruskan jawatan mereka sendiri. Penyumbang boleh menulis dan menguruskan jawatan mereka sendiri, tetapi mereka tidak dapat diposkan. Pelanggan hanya boleh menguruskan profil mereka.

    Bagaimana untuk menambah peranan pengguna baru dalam WordPress?

    Untuk menambah peranan pengguna baru dalam WordPress, anda boleh menggunakan fungsi

    . Fungsi ini menerima tiga parameter: peranan, nama paparan, dan array kebenaran. Sebagai contoh, untuk menambah peranan baru yang dipanggil "custom_role" dan mempunyai kebenaran untuk membaca dan mengedit catatan, anda boleh menggunakan kod berikut: add_role()

    add_role( 'custom_role', __('自定义角色'), array( 'read' => true, // 可以读取帖子 'edit_posts' => true, // 可以编辑帖子 ) ); Bagaimana untuk memadam peranan pengguna di WordPress?

    Untuk memadam peranan pengguna dalam WordPress, anda boleh menggunakan fungsi

    . Fungsi ini menerima satu parameter: peranan. Sebagai contoh, untuk memadam "custom_role" yang telah ditambah sebelum ini, anda boleh menggunakan kod berikut:

    remove_role()

    Bagaimana untuk menambah kebenaran kepada peranan pengguna dalam WordPress? remove_role('custom_role');

    Untuk menambah kebenaran kepada peranan pengguna dalam WordPress, anda boleh menggunakan fungsi

    . Fungsi ini menerima dua parameter: kebenaran dan nilai boolean yang menunjukkan sama ada peranannya mempunyai kebenaran. Sebagai contoh, untuk menambah kebenaran "Publish_posts" ke "Custom_Role", anda boleh menggunakan kod berikut:

    $role = get_role('custom_role'); $role->add_cap('publish_posts', true);

    Bagaimana untuk membuang kebenaran daripada peranan pengguna dalam WordPress?

    Untuk mengalih keluar keizinan dari peranan pengguna dalam WordPress, anda boleh menggunakan fungsi

    . Fungsi ini menerima parameter: kebenaran. Sebagai contoh, untuk mengeluarkan kebenaran "Publish_posts" dari "Custom_Role", anda boleh menggunakan kod berikut: remove_cap()

    $role = get_role('custom_role'); $role->remove_cap('publish_posts'); Bagaimana untuk menukar peranan pengguna lalai di WordPress?

    untuk menukar peranan pengguna lalai dalam WordPress, navigasi ke Tetapan & GT; Di bawah peranan lalai pengguna baru, pilih peranan yang ingin anda tetapkan sebagai lalai dari menu lungsur.

    Bagaimana untuk menetapkan pelbagai peranan kepada pengguna di WordPress?

    WordPress tidak menyokong memberikan pelbagai peranan kepada pengguna secara lalai. Walau bagaimanapun, anda boleh melakukan ini menggunakan plugin seperti pelbagai peranan. Selepas anda memasang dan mengaktifkan plugin, anda boleh menetapkan pelbagai peranan kepada pengguna dari halaman profil pengguna.

    Bagaimana untuk mengehadkan akses kandungan berdasarkan peranan pengguna dalam WordPress?

    Untuk menyekat akses kandungan berdasarkan peranan pengguna dalam WordPress, anda boleh menggunakan plugin seperti ahli. Plugin ini membolehkan anda mengawal peranan mana yang boleh mengakses kandungan tertentu di laman web anda.

    Bagaimana untuk membuat keizinan tersuai di WordPress?

    Untuk membuat keizinan tersuai dalam WordPress, anda boleh menggunakan fungsi

    . Fungsi ini menerima dua parameter: kebenaran dan nilai boolean yang menunjukkan sama ada peranannya mempunyai kebenaran. Sebagai contoh, untuk menambah kebenaran tersuai bernama "Manage_Custom" kepada "Custom_role", anda boleh menggunakan kod berikut:

    add_cap()

    Bagaimana untuk memeriksa sama ada pengguna di WordPress mempunyai keizinan tertentu? $role = get_role('custom_role'); $role->add_cap('manage_custom', true);

    Untuk memeriksa sama ada pengguna di WordPress mempunyai keizinan tertentu, anda boleh menggunakan fungsi

    . Fungsi ini menerima parameter: kebenaran. Sebagai contoh, untuk memeriksa sama ada pengguna semasa mempunyai kebenaran "Manage_Custom", anda boleh menggunakan kod berikut:

    current_user_can()

    Semua gambar mengekalkan format dan lokasi asal mereka.

Atas ialah kandungan terperinci Menguasai peranan dan keupayaan WordPress. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan