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.
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. register_activation_hook()
. Cara lain ialah memintas pangkalan data WordPress dengan menetapkan pembolehubah global $wp_user_roles
. Pangkalan data
menyimpan senarai ini dalam jadual. wp_options
. wp_user_roles
Data deserialized adalah seperti 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>
Apabila WordPress bermula, kelas
memuatkan senarai dari pangkalan data.
WP_Roles
Ini berlaku antara cangkuk
. plugins_loaded
init
Pautan pengguna ke peranan
untuk menghubungkan pengguna ke peranan mereka. wp_usermeta
meta_key
<code>array( 'administrator' => true )</code>
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:
wp_capabilities
= & gt;
a:1:{s:13:"administrator";b:1;}
wp_10_capabilities
a:1:{s:11:"contributor";b:1;}
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.
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>
Menggunakan Peranan dan Kebenaran: WordPress Api
current_user_can()
Periksa sama ada pengguna semasa mempunyai keizinan yang diperlukan.
<code>array( 'administrator' => true )</code>
WP_User::has_cap
kita dapat melihat bahawa
menggunakan fungsi ini.<code>if (!current_user_can('activate_plugins')) { wp_die(__('您没有足够的权限来管理此站点的插件。')); }</code>
current_user_can
get_editable_roles()
, 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>
, kerana fungsi itu belum dimuatkan dalam cangkuk editable_roles
lagi.
admin_init
init
GET
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>
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>
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>
remove_role()
,
...) atau mana -mana rentetan tersuai (<code>add_action('init', function() { $role = get_role('administrator'); var_dump($role->has_cap('install_plugins')); // 打印 TRUE });</code>
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>
install_plugins
edit_posts
my_awesome_plugin_cap
WP_Role::remove_cap()
sebelum menambah peranan baru.
<code>add_action('init', function() { remove_role('plugins_manager'); });</code>
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>
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>
Ini sangat berguna jika kita mahu menambah kebenaran tunggal kepada pengguna tanpa perlu membuat peranan penuh.
WP_User::remove_cap()
<code>array( 'administrator' => true )</code>
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>
): add_role
WP_Roles::add_role
<code>add_action('init', function() { if (current_user_can('install_plugins')) { echo '您可以安装插件'; } else { echo '您不能安装插件'; } });</code>
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>
WP_Role::add_cap()
<code>add_action('admin_init', function() { $roles = get_editable_roles(); var_dump($roles); });</code>
$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.
WordPress membolehkan penulis plugin menggunakan fungsi
untuk mencetuskan kod apabila plugin diaktifkan di backend.
register_activation_hook()
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>
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.
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>
kepada palsu. $wp_user_roles
$this->use_db
Penyelesaian ini menyelesaikan masalah pangkalan data, tetapi mungkin memperkenalkan beberapa isu lain:
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
Bagaimana untuk menambah peranan pengguna baru dalam WordPress?
. 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?
remove_role()
Bagaimana untuk menambah kebenaran kepada peranan pengguna dalam WordPress? remove_role('custom_role');
$role = get_role('custom_role'); $role->add_cap('publish_posts', true);
. 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?
Bagaimana untuk menetapkan pelbagai peranan kepada pengguna di WordPress?
Bagaimana untuk mengehadkan akses kandungan berdasarkan peranan pengguna dalam WordPress?
Bagaimana untuk membuat keizinan tersuai di WordPress?
add_cap()
Bagaimana untuk memeriksa sama ada pengguna di WordPress mempunyai keizinan tertentu? $role = get_role('custom_role'); $role->add_cap('manage_custom', true);
current_user_can()
Atas ialah kandungan terperinci Menguasai peranan dan keupayaan WordPress. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!