Rolul și capabilitățile WordPress Elementele de bază

Aceasta este o serie de tutori din patru părți care acoperă tema utilizatorilor, rolurilor și capabilităților WordPress. Seria va acoperi arhitectura și designul rolurilor utilizatorilor în WordPress; evidențiați cele mai importante funcții pentru interacțiunea cu utilizatorii și gestionarea rolurilor și a capacităților; și în ultimul tutorial, vom construi un exemplu din viața reală care demonstrează utilitatea acestui API.


Introducere

În această primă parte, vom trece prin elementele de bază și funcționarea interioară a sistemului WordPress pentru utilizatori, roluri și capabilități. În această parte nu vor fi acoperite funcții sau coduri. Deci, puteți să treceți la următoarea dacă sunteți interesat doar de scrierea unui cod care interacționează cu acest sistem. Cu toate acestea, aș recomanda ca mai întâi să treceți prin aceasta pentru a obține o idee de bază despre utilizatori și roluri în WordPress.

În urma versiunii 2.0, WordPress a introdus un nou sistem de roluri și capabilități, care a înlocuit sistemul de niveluri mai în vârstă. Sistemul mai vechi nu va fi discutat; este acum complet depreciat (de la versiunea 3.0) și nu ar mai trebui folosit.

Noul sistem este mai avansat și mai flexibil. Acum este posibil să creați permisiuni personalizate și să le atribuiți pentru fiecare utilizator. Această actualizare a venit pentru a aborda deficiențele din modelul vechi și pentru a permite dezvoltatorilor să construiască pluginuri și teme mai puternice și personalizate.


Arhitectura bazei de date pentru utilizatori

  1. Schema tabelelor utilizatorilor

    WordPress păstrează datele utilizatorilor în două tabele: wp_users și wp_usermeta (Voi lua ipoteza pe parcursul întregii serii că programul dvs. WordPress utilizează implicit wp_ prefix). Al doilea tabel este creat pentru a extinde primul tabel și îi permite dezvoltatorilor să atașeze date suplimentare fiecărui utilizator.

    Dacă a existat doar un singur tabel, nu veți putea atașa mai multe date utilizatorilor sau nu trebuie să păstrați toate aceste date serializate într-un rând din coloană, ceea ce nu este destul de bun pentru performanță și scalabilitate. (Imaginați-vă că aveți 50 de pluginuri în care fiecare adaugă câte 2 sau 3 câmpuri pentru fiecare utilizator.)

    Mai jos este o schemă a schemelor celor două tabele. Tabelele sunt legate împreună cu o relație "una la multe". De fapt, puteți avea la fel de multe rânduri pe care le doriți în wp_usermeta cu acelasi numele de utilizator (care este cheia externă pentru această relație și reprezintă coloana ID din wp_users)

  2. În interiorul tabelelor

  3. Dacă privim schema acestor două tabele, putem concluziona că wp_users este utilizat pentru a deține o cantitate limitată și finită de date despre fiecare utilizator. Unele dintre ele sunt necesare și utilizate în cea mai mare parte de core de WordPress, teme sau plugin-uri cum ar fi login, parola, e-mail și un nume frumos (de asemenea, porecla). Dar nu este cazul user_url câmp, de exemplu. Acest câmp se poate potrivi în wp_usermeta deoarece nu este necesar.

    Unele câmpuri obligatorii sunt stocate în wp_usermeta ca porecla. De fapt, eu sunt doar conștient de asta. Cu toate acestea, unele informații critice, cum ar fi capabilitățile utilizatorilor, nivelul utilizatorilor și modul SSL, sunt stocate în wp_usermeta de asemenea. Acest lucru nu este mai puțin important decât wp_users (mai ales atunci când permisiunile și securitatea reprezintă o preocupare enormă).

    Acestea fiind spuse, ar trebui să fii atent când ai de-a face cu ambele mese. Aș recomanda să vă lipiți de funcțiile WordPress pentru a interacționa cu sistemul de utilizatori și capabilități.


Roluri și capabilități în WordPress

Ca orice alt CMS, WordPress oferă un sistem de permisiune pentru utilizator pentru a seta și a restricționa privilegiile pentru fiecare utilizator. În această secțiune, voi explica conceptul de roluri și capabilități în WordPress. Deci, dacă v-ați confruntat cu explicația Codului, sper că aceasta este mai clară, deoarece mă apropii de concept diferit.

  1. O prezentare generală despre capabilități

    Uitați de roluri. Să presupunem că pentru câteva minute nu există.

    Să presupunem următorul scenariu: Aveți un blog WordPress pe care l-ați configurat recent și sunteți administratorul. (Așa că ați obținut toată puterea posibilă acolo). Ați decis să adăugați un utilizator nou pe blogul dvs. pentru a contribui la unele postări pe blog. De asemenea, ați crezut că ar fi corect să îi permiteți să comenteze și să personalizeze numele afișat.

    Mai jos este o imagine a utilizatorului nostru cu capabilitățile pe care le-ați atribuit lui.

    Deci este la fel de simplu ca asta. Atribuiți capabilități utilizatorilor. Sunteți liber să numiți aceste capacități. De exemplu, puteți numi "write_new_post" ca slug pentru a scrie un post nou.

    În blogul dvs., veți avea o listă de capabilități, fiecare având o putere specială și limitată pentru utilizatorii care le au. Fiecare utilizator poate avea un număr limitat de capabilități. Un utilizator care are toate capabilitățile este un Administrator, deoarece poate face totul. Gândiți-vă la acesta ca la un sistem de permisiune, iar capabilitățile sunt permisiuni pe care le acordați utilizatorilor.

    Dar de ce contează capacitățile? Ei bine, tu ești responsabilul pentru asta. De exemplu, în cazul în care construiți propriul plugin (sau temă), puteți crea propriul dvs. "access_control_panel"și alocați-l unui număr de utilizatori.

    Când un utilizator solicită "panoul de control", trebuie să verificați dacă utilizatorul are funcția "access_control_panel"înainte de a afișa pagina Panoului de control. De asemenea, puteți verifica capacitatea înainte de a executa o anumită bucată de cod pentru a vă asigura că utilizatorul are privilegiile necesare.

    WordPress vine cu un număr implicit de capabilități necesare funcționării sale. Puteți folosi și aceste capacități, dar aveți grijă să nu le eliminați. Cu siguranță vă puteți face propriile și personalizate capabilități.

  2. Cum joacă rolurile

    Deci acum știm ce capabilități sunt. Să ne gândim la un alt scenariu, în care aveți o mulțime de utilizatori. Doriți să împărțiți acești utilizatori în două grupuri: Utilizatori puternici și utilizatori mai puțin puternici. Fiecare grup de utilizatori va avea capacități speciale.

    Pentru a face acest lucru, trebuie să alocați aceste capacități fiecărui utilizator care poate fi puțin frustrant și neproductiv. Rolurile sunt făcute exact pentru asta, acestea sunt grupurile de utilizatori.

    Deci, în loc să alocați capabilități utilizatorilor, le atribuiți rolurilor; și apoi asociați rolurile utilizatorilor. Cu toate acestea, este posibil să atribuiți capabilități direct utilizatorilor. Un rol poate fi făcut pentru unul sau mai mulți utilizatori; și un utilizator nu poate avea unul, unul sau mai multe roluri.

    Deci realitatea este mult mai asemănătoare.

    Este important să rețineți că ar trebui să verificați capacitatea unui utilizator și nu un rol de utilizator înainte de a rula codul care necesită permisiune. Nu presupuneți niciodată că un rol are o capacitate specifică deoarece acesta poate fi modificat de un alt plugin sau temă.

  3. Meta Capabilități

    Există acțiuni care necesită mai multe capabilități. De exemplu, pentru a edita o postare pe blog,editează postarea"capacitate. Dar dacă această postare pe blog a fost creată de un alt utilizator? Veți avea nevoie de "edit_other_postsde asemenea. Deci, trebuie să verificați ambele înainte de a lăsa utilizatorului să editeze postul.

    Acolo se află capabilitățile meta. WordPress are a map_meta_cap () funcția care returnează o gamă de capacități necesare pentru a executa o anumită capacitate.

    Deci, să ne întoarcem la exemplul anterior. Să presupunem că avem un utilizator cu un ID de 3 și vrem să verificăm dacă acest utilizator poate edita o postare pe blog cu un ID de 5. Această postare de pe blog este publicată de un alt utilizator cu un ID de 6.

    În acest caz, map_meta_cap () funcția va returna o matrice cu următoarele capabilități: editează postarea, edit_published_posts, și edit_other_posts. Pentru a crea acea matrice, map_meta_cap () funcția trebuie să efectueze anumite verificări bazate pe utilizator și pe post.

    Funcțiile implicite pe care funcția le verifică sunt "delete_user","edit_user","remove_user","promote_user","delete_post","delete_page","editează postarea","pagina de editare","read_post"sau"read_page“. Este posibil, totuși, să vă măriți cu propriul dvs., apropiindu-vă de "map_meta_cap' filtru.


Concluzie

Așa a fost, pe scurt, sistemul de utilizatori și permisiuni WordPress. Am încercat să o păstrez la fel de simplă și minimalistă; și am evitat să includ orice cod din acest motiv. În partea următoare, vom examina o gamă largă de funcții pe care WordPress le oferă pentru a interacționa cu acest sistem.

Cod