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()
, danremove_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
. 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>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
. plugins_loaded
init
Pautan pengguna ke peranan
WordPress menggunakan
disimpan dalam jadual 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:
- = & 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>
Peranan tidak pernah dikodkan;current_user_can()
Periksa sama ada pengguna semasa mempunyai keizinan yang diperlukan.<code>array( 'administrator' => true )</code>
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(__('您沒有足夠的權(quán)限來管理此站點的插件。')); }</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>
Sila ambil perhatian penggunaan cangkuk, kerana fungsi itu belum dimuatkan dalam cangkuk
editable_roles
lagi.admin_init
init
GETObjek 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>
Api CustomWP_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>
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>
Tambah keizinan kepada peranan.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>
Jika wujud, padamkan keizinan dari peranan.install_plugins
edit_posts
my_awesome_plugin_cap
Fungsi ini membolehkan anda secara teorinya menetapkan pelbagai peranan untuk pengguna yang sama.
Oleh kerana backend WordPress hanya memaparkan dan menguruskan satu peranan setiap pengguna, kita tidak boleh menambah banyak peranan untuk pengguna dan harus sentiasa menggunakanWP_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>
Beberapa isu dengan WordPress APIharus kod kita dicetuskan? Untuk menjelaskan ini, mari kita lihat kod teras WordPress.
Pertama, kami ingin menambah watak kosong baru:
<code>if (!current_user_can('activate_plugins')) { wp_die(__('您沒有足夠的權(quán)限來管理此站點的插件。')); }</code>
(sebenarnya diarahkan ke):
Jika kita menambah peranan baru, fungsiadd_role
WP_Roles::add_role
<code>add_action('init', function() { if (current_user_can('install_plugins')) { echo '您可以安裝插件'; } else { echo '您不能安裝插件'; } });</code>
berjalan sekali dan kemudian tidak melakukan apa -apa.add_role
Seterusnya, katakan kami ingin menambah keizinan kepada peranan kami yang baru dibuat:<code>add_action('init', function() { $user = get_user_by('slug', 'admin'); if ($user->has_cap('install_plugins')) { echo '管理員可以安裝插件'; } else { echo '管理員不能安裝插件'; } });</code>
dalam WordPress 4.2.2 adalah seperti berikut:WP_Role::add_cap()
<code>add_action('admin_init', function() { $roles = get_editable_roles(); var_dump($roles); });</code>
, 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. PenyelesaianTerdapat 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.register_activation_hook()
<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.
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>
Jika ditetapkan, WordPress akan menggunakan kandungannya dan menyekat penggunaan pangkalan data dengan menetapkan pembolehubahkepada palsu.
mari kita cuba, hanya menyimpan peranan pentadbir yang baru dan terhad:$wp_user_roles
$this->use_db
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.
. 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?
Untuk menambah kebenaran kepada peranan pengguna dalam WordPress, anda boleh menggunakan fungsiremove_role('custom_role');
. 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);
. 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?
Untuk memeriksa sama ada pengguna di WordPress mempunyai keizinan tertentu, anda boleh menggunakan fungsi$role = get_role('custom_role'); $role->add_cap('manage_custom', true);
. 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()
Atas ialah kandungan terperinci Menguasai peranan dan keupayaan WordPress. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undress AI Tool
Gambar buka pakaian secara percuma

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Sebab-sebab utama mengapa WordPress menyebabkan lonjakan dalam penggunaan CPU pelayan termasuk masalah pemalam, pertanyaan pangkalan data yang tidak cekap, kualiti kod tema yang buruk, atau lonjakan trafik. 1. 2. Masukkan mod penyelesaian masalah untuk secara beransur-ansur membolehkan pemalam untuk menyelesaikan masalah kesesakan prestasi, gunakan QueryMonitor untuk menganalisis pelaksanaan pemalam dan memadam atau menggantikan pemalam yang tidak cekap; 3. Pasang pemalam cache, bersihkan data berlebihan, menganalisis log pertanyaan perlahan untuk mengoptimumkan pangkalan data; 4. Periksa sama ada topik itu mempunyai masalah seperti kandungan beban, pertanyaan kompleks, atau kekurangan mekanisme caching. Adalah disyorkan untuk menggunakan ujian topik standard untuk membandingkan dan mengoptimumkan logik kod. Ikuti langkah -langkah di atas untuk memeriksa dan menyelesaikan lokasi dan selesaikan masalah satu demi satu.

Fail JavaScript Minive boleh meningkatkan kelajuan memuatkan laman web WordPress dengan mengeluarkan kosong, komen, dan kod yang tidak berguna. 1. Gunakan pemalam cache yang menyokong penggabungan mampatan, seperti w3totalcache, aktifkan dan pilih mod mampatan dalam pilihan "Minify"; 2. Gunakan plug-in mampatan khusus seperti fastvelocityminify untuk memberikan lebih banyak kawalan berbutir; 3. Secara manual memampatkan fail JS dan memuat naiknya melalui FTP, sesuai untuk pengguna yang biasa dengan alat pembangunan. Perhatikan bahawa beberapa tema atau skrip plug-in mungkin bertentangan dengan fungsi mampatan, dan anda perlu menguji fungsi laman web dengan teliti selepas pengaktifan.

Kaedah untuk mengoptimumkan tapak WordPress yang tidak bergantung pada pemalam termasuk: 1. Gunakan tema ringan, seperti Astra atau GeneratePress, untuk mengelakkan tema tumpukan; 2. Secara manual memampatkan dan menggabungkan fail CSS dan JS untuk mengurangkan permintaan HTTP; 3. Mengoptimumkan imej sebelum memuat naik, gunakan format web dan saiz fail kawalan; 4. Configure.htaccess untuk membolehkan cache penyemak imbas, dan sambungkan ke CDN untuk meningkatkan kelajuan pemuatan sumber statik; 5. Hadkan semakan artikel dan data yang kerap dibersihkan data yang berlebihan.

Transientsapi adalah alat terbina dalam di WordPress untuk menyimpan data tamat tempoh automatik sementara. Fungsi terasnya adalah set_transient, get_transient dan delete_transient. Berbanding dengan OptionsAPI, transien menyokong penetapan masa kelangsungan hidup (TTL), yang sesuai untuk senario seperti hasil permintaan API cache dan data pengkomputeran yang kompleks. Apabila menggunakannya, anda perlu memberi perhatian kepada keunikan penamaan utama dan ruang nama, mekanisme "penghapusan malas" cache, dan isu yang mungkin tidak bertahan dalam persekitaran cache objek. Senario aplikasi biasa termasuk mengurangkan kekerapan permintaan luaran, mengawal irama pelaksanaan kod, dan meningkatkan prestasi pemuatan halaman.

Cara yang paling berkesan untuk mengelakkan spam komen adalah untuk mengenal pasti dan memintasnya secara automatik melalui cara programatik. 1. Menggunakan mekanisme kod pengesahan (seperti Googler Captcha atau HCaptcha) untuk membezakan secara berkesan antara manusia dan robot, terutama yang sesuai untuk laman web awam; 2. Tetapkan bidang tersembunyi (teknologi honeypot), dan gunakan robot untuk mengisi ciri -ciri secara automatik untuk mengenal pasti komen spam tanpa menjejaskan pengalaman pengguna; 3. Semak senarai hitam Kata Kunci Kandungan Komen, maklumat spam penapis melalui pemadanan kata yang sensitif, dan perhatikan untuk mengelakkan salah faham; 4. Hakim kekerapan dan sumber IP komen, hadkan bilangan penyerahan per unit masa dan buat senarai hitam; 5. Gunakan perkhidmatan anti-spam pihak ketiga (seperti Akismet, CloudFlare) untuk meningkatkan ketepatan pengenalan. Boleh berdasarkan laman web

Apabila membangunkan blok gutenberg, kaedah aset enqueue yang betul termasuk: 1. Gunakan daftar_block_type untuk menentukan laluan editor_script, editor_style dan gaya; 2. Daftar sumber melalui wp_register_script dan wp_register_style dalam fungsi.php atau plug-in, dan tetapkan kebergantungan dan versi yang betul; 3. Konfigurasikan alat binaan untuk mengeluarkan format modul yang sesuai dan pastikan laluan itu konsisten; 4. Kawalan logik pemuatan gaya depan melalui add_theme_support atau enqueue_block_assets untuk memastikan logik pemuatan gaya front-end dipastikan.

Plugincheck adalah alat yang membantu pengguna WordPress dengan cepat menyemak keserasian dan prestasi pemalam. Ia digunakan terutamanya untuk mengenal pasti sama ada pemalam yang dipasang pada masa ini mempunyai masalah seperti tidak serasi dengan versi terkini WordPress, kelemahan keselamatan, dan lain-lain. Bagaimana untuk memulakan cek? Selepas pemasangan dan pengaktifan, klik butang "Runascan" di latar belakang untuk mengimbas semua pemalam secara automatik; 2. Laporan ini mengandungi nama pemalam, jenis pengesanan, penerangan masalah dan cadangan penyelesaian, yang memudahkan pengendalian masalah yang serius; 3. Adalah disyorkan untuk menjalankan pemeriksaan sebelum mengemas kini WordPress, apabila keabnormalan laman web tidak normal, atau kerap dijalankan untuk menemui bahaya tersembunyi terlebih dahulu dan mengelakkan masalah utama di masa depan.

Untuk menambah medan pengguna tersuai, anda perlu memilih kaedah lanjutan mengikut platform dan memberi perhatian kepada pengesahan data dan kawalan kebenaran. Amalan umum termasuk: 1. Gunakan jadual tambahan atau pasangan nilai utama pangkalan data untuk menyimpan maklumat; 2. Tambah kotak input ke hujung depan dan diintegrasikan dengan hujung belakang; 3. Mengatasi Pemeriksaan Format dan Kebenaran Akses untuk Data Sensitif; 4. Kemas kini antara muka dan templat untuk menyokong paparan dan penyuntingan medan baru, sambil mengambil kira penyesuaian mudah alih dan pengalaman pengguna.
