Oma veebiarenduse praktikas puutusin väga sageli kokku olukordadega, kus kliendid seavad kindla eesmärgi, nimelt administraatori paneeli osade jaotuse teatud kasutajate ligipääsetavuse osas. Veelgi enam, selle mooduli väljatöötamine viidi läbi laiendatava süsteemi kontekstis, see tähendab fikseerimata arvu moodulitega, millele juurdepääs on korraldatud, ja vastavalt piiramatu arvu süsteemikasutajatega.
Noh, see teema ise on üsna raske ja nõuab natuke aega probleemi analüüsimiseks ja sõnastamiseks.
Selle artikli kontekstis töötame välja mõne abstraktse infosüsteemi kontekstis, millel on oma infrastruktuur ja arhitektuur, samas kui see süsteem annab kasutajale võimaluse laiendada funktsionaalsust, st installida uusi mooduleid ja vastavalt sellele seadistada juurdepääsu. õigused neile sellele või teisele süsteemiadministraatorina registreeritud kasutajale.
Arutleme moodulsüsteemi arhitektuuri üle meie valitud pseudosüsteemil algusest peale.
Kõik moodulid on esitatud põhidokumendiga (indeksifailiga) ühendatud lisade kujul. Pistikprogrammi taotlus pärineb päringustringist QUERY_STRING ja pistikprogrammi nimi edastatakse akti argumendina. Mingil hetkel failiindeksis see parameeter hangitakse ja töödeldakse. Pärast seda, kui kasutajal on lugemiskontekstis moodulile ligipääsuks piisavad õigused, kontrollitakse päringureal määratud mooduli olemasolu ja kui see on olemas, siis ühendatakse see registrifailiga.
Mainisin "lugemiskonteksti" põhjusega, kuna meie süsteem eeldab süsteemiga töötamiseks kahe konteksti olemasolu, nimelt lugemist ja kirjutamist. Sel juhul tähendab lugemine otsest juurdepääsu moodulile ja selle nendele osadele, mis ei hõlma muudatusi andmebaasi andmestruktuuris. Salvestamise all peame silmas otsest muudatuste tegemist andmebaasis salvestatud teabes.
Selle mehhanismi rakendamiseks kontrollime päringustringi muutuja "do" väärtust, mida töödeldakse moodulis endas ja mis kannab teavet selle kohta, millisele mooduli jaotisele tuleb kasutajale juurdepääs anda.
Do väärtus fikseeritakse, see muutuja võtab järgmised väärtused:
- peamine – mooduli põhiosa (saadaval lugemiskontekstis)
- config - mooduli konfiguratsiooni sektsioon (saadaval salvestamise kontekstis)
- loo - tehke mõned toimingud teabe lisamiseks andmebaasi (saadaval kirje kontekstis)
- Kustuta - juurdepääs jaotisele, mis annab võimaluse teatud mooduli kontekstis teatud teavet kustutada (saadaval kirje kontekstis)
- redigeerimine – juurdepääs teabe muutmiseks mooduli kontekstis (saadaval postituse kontekstis)
Üldiselt saab seda loendit suurendada, kuid kõik sõltub ainult projekti ulatusest ja selle funktsionaalsetest vajadustest.
Nüüd otse moodulitest. Lisaks teatud mooduli füüsilisele olemasolule projekti failisüsteemi kontekstis tuleb moodul lisada ka spetsiaalsesse andmebaasitabelisse, mis hakkab sisaldama infot kõigi süsteemis olemasolevate moodulite kohta. Andmete lisamine ja muutmine selles tabelis toimub tavaliselt otse moodulite kontekstis, st nende süsteemi installimise ajal. See on aga juba süvenemine laiendatavate süsteemide vaatamise põhimõtetesse, millest räägime mõni teine kord ning seetõttu piirdume käsitsi uuendamise ja moodulite andmete lisamisega.
Seega sisaldab süsteemimooduli kirje järgmist teavet: mooduli nime ingliskeelne identifikaator, mis on identne keskkonnamuutuja GET väärtusega - act (moodulit küsitakse selle kohta otse), Mooduli venekeelne identifikaator, mida kasutatakse moodulite loendis.
Lisaks moodulitele on meil veel kaks tabelit, nimelt tabel, kuhu salvestatakse juurdepääsuõiguste profiilide andmed ja tabel, mis sisaldab teavet otse kasutajate kohta.
Turvaprofiilitabel koosneb ainult kolmest väljast - profiili identifikaator (kirje identifikaatori numbriline väärtus), tekstimooduli identifikaator (kasutajatele) ning spetsiaalselt loodud tekstisildist, mis sisaldab teavet kasutajaõiguste kohta kontekstis. iga mooduli kohta.
Noh, vaatame seda konkreetset struktuuri. See on järgmine: [module_indefier: + \: + \;] *
See tähendab, et seal on paaride loend: mooduli nimi ":" lugemisõigused "," kirjutamisõigused ";". Sel juhul värskendatakse seda silti, kui kasutaja süsteemi juurdepääsuõigusi muudetakse. Kui süsteemi ilmub teave mooduli kohta, mida see silt ei sisalda, peate lihtsalt läbi viima redigeerimisprotseduuri ja andmed salvestatakse automaatselt.
Nüüd tuleb vaid vaadata vaid ühe andmebaasitabeli ülesehitust ning asuda saabki realiseerima algoritmilise osa ehk süsteemi kasutajate infoga tabelit, sest neile juurdepääsuõiguste määramine on meie põhiülesanne.
Ma ei lisa sellele midagi ekstra, vaid ainult seda, mida selle artikli teema kontekstis kasutatakse. Kasutajate tabel sisaldab järgmisi välju: kasutajatunnus (numbriline loendur), sisselogimine, parool (algse parooli räsi), kasutaja turvaprofiil (kasutajarühma ID, süsteemis olevate õiguste suhtes) ja kõik. Mulle tundub, et see teave on teile ja mulle täiesti piisav ülesande täitmiseks ja ma annan võimaluse kõik muud lisandmoodulid ise teha.
Niisiis arutasime struktuuri ja loodan, et kõigil on juba ettekujutus sellest, kuidas me artikli teemas seatud ülesande ellu viime. Nüüd annan ülalkirjeldatud tabelitele SQL-i abikoodi, misjärel asun koheselt edasi kasutaja juurdepääsuõiguste kontrollimise algoritmi juurutamise, samuti juurdepääsuprofiilide loomise ja muutmise juurde. Pärast iga üksikut moodulit arutame üksikasjalikult kõiki lugejatel tekkida võivaid küsimusi.
moodulite tabel:
CREATE TABLE `moodulid` (`id` bigint(20) NOT NULL auto_increment, `indefier` teksti sortimine utf8_unicode_ci NOT NULL, `title` teksti sortimine utf8_unicode_ci NOT NULL, PRIMARY KEY (`id=C)yISAMENT=1 AUTOMAATNE_MÄÄR. CHARSET=utf8 COLLATE=utf8_unicode_ci;
tabel "turvalised_rühmad":
CREATE TABLE `secure_groups` (`id` bigint(20) NOT NULL auto_increment, `title` teksti sortimine utf8_unicode_ci EI NULL, `perms` teksti sortimine utf8_unicode_ci NOT NULL, PRIMARY KEY NOT NULL, PRIMARY KEY NOT NULL, PRIMARY KEY NOT NULL CHARSET=utf8 COLLATE=utf8_unicode_ci ;
Tabel "kasutajad".
CREATE TABLE `users` (`id` bigint(20) NOT NULL auto_increment, `login` teksti sortimine utf8_unicode_ci NOT NULL, `passwd` teksti sortimine utf8_unicode_ci NOT NULL, `groupId` int(1) NOT NULLIMARY KEY (`id`)) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci ;
temp=massiivi();
$see->temp["_tulemus"]=0;
$this->temp["_uid"]=explode("::",$_COOKIE["site_hash"]);
$this->temp["_uid"]=$this->temp["_uid"];
$this->temp["_gid"]=$this->getUserSecurityAccess($this->temp["_uid"]);
$this->temp["_conn_id"]=mysql_connect("host","kasutaja","passwd");
mysql_select_db("andmebaas");
$this->temp["_q1"]=mysql_query("SELECT perms" ."FROM `turvalistest_rühmadest`" ."KUS id=".$this->temp["_gid"]);
$this->temp["_access_stamp"]=mysql_fetch_assoc($this->temp["_q1"]);
Autoriseerimisprotseduur näeb välja selline, nagu sisestatakse kasutaja isikuandmed (sisselogimine ja parool) spetsiaalsele vormile, mille saatmise järel töödeldakse kasutaja poolt esitatud andmeid funktsiooni checkAuthData() meetodil ning andmete õigsuse korral kasutajaandmeid salvestatakse salvestusküpsistena kasutaja määratud perioodiks või määratud väärtuse puudumisel vaikeperioodiks.
Keskkonnamuutujas $_COOKIE salvestatud andmete autentsuse kontrollimiseks kasutame funktsiooni EatCookie(), mis kinnitab andmed, tagastades Boole'i kontrollitulemuse (true - false).
Ma ei paku esitamiseks vormi, kuna see ei kuulu programmeerimise teooriasse, näidates ainult väljade identifikaatoreid.
- `ulogin` – kasutaja sisselogimine
- `upasswd` – kasutaja parool
- "aeg" – kasutaja määratud seansi aeg (1 kuni 5 tundi)
- "auth" – saatmisnupu nimi
See on kõik. Jääb üle vaid proovida, katsetada, teha vigu ja leida lahendus, mille jätan täielikult teie hooleks.
Loodan, et kohtume varsti ja neile, kellel on minu jaoks artikli kohta küsimusi ja mitte ainult - kirjutage [e-postiga kaitstud], või sisse [e-postiga kaitstud].
Lugupidamisega IAJ IT osakonna juhataja Kirill Karpenko.
Esiteks täiustame registreerimislehte, lisades avatari üleslaadimise võimaluse. Lähtepilt peab olema jpg-, gif- või png-vormingus. Samuti ei tohiks see olla suurem kui 2 MB. Ärge muretsege, pärast skripti poolt selle tihendamist on avatari suurus umbes 3 kb ja jpg-vormingus. Avage leht reg.php ja lisage see sildile < vormi> rida enctype="multipart/form-data", nagu näites: