Location: PHPKode > projects > PhpGACL > phpgacl-3.3.7/docs/translations/russian/manual_rus.txt
phpGACL - ðóññêàÿ äîêóìåíòàöèÿ
Ñîäåðæàíèå
Ñîäåðæàíèå
Î ñêðèïòå
        ×òî ýòî?
        Ãäå âçÿòü?
        ×òî íóæíî äëÿ çàïóñêà?
        Àâòîðû
Ââåäåíèå
        Ïîíèìàíèå êîíòðîëÿ äåéñòâèÿ
        Óïðàâëåíèå êîíòðîëåì äîñòóïà ïðè ïîìîùè phpGACL
        Ïîäðîáíûé êîíòðîëü äîñòóïà
        Ìíîãîóðîâíåâûå ãðóïïû
        Êàê phpGACL îïðåäåëÿåò ðàçðåøåíèÿ?
        Äîáàâëåíèå ãðóïïû       Äîáàâëåíèå ëþäåé
        Óñòðàíåíèå êîíôëèêòîâ
        Îáîçíà÷åíèå îáúåêòîâ äîñòóïà
        Äîáàâëåíèå ðàçäåëîâ
        Ìíîæåñòâî öåëåé
        Îáúåêòû ðàñøèðåíèÿ äîñòóïà (AXO)
Èíñòàëëÿöèÿ
        Áàçîâàÿ íàñòðîéêà
        Äîïîëíèòåëüíàÿ íàñòðîéêà
Èñïîëüçîâàíèå phpGACL â âàøåé ïðîãðàììå
        Áàçîâîå èñïîëüçîâàíèå
        Ïðîôåññèîíàëüíîå èñïîëüçîâàíèå
                Èñïîëüçîâàíèå àäìèíèñòðàòèâíîãî èíòåðôåéñà
                Îïèñàíèå API
                        ACL
                        Groups (Ãðóïïû)
                        Access Objects (ACO, ARO, AXO) (Îáúåêòû äîñòóïà)
                        Access Objects Section (ðàçäåëû îáúåêòîâ äîñòóïà)









        

Mike Benoit (hide@address.com)
James Russell (james-hide@address.com)
Karsten Dambekalns (hide@address.com)
Ðóññêèé ïåðåâîä Ôåñüêîâ Êóçüìà (hide@address.com) (http://php.russofile.ru)
Copyright © 2002,2003, Mike Benoit
Copyright © 2003, James Russell
Copyright © 2003, Karsten Dambekalns
Document Version: 672
Last Updated: 5/20/03 - 18:55:08
phpGACL
×òî ýòî?
PhpGACL – ýòî íàáîð ôóíêöèé, êîòîðûé ïîçâîëÿåò îïðåäåëèòü ïðàâà äîñòóïà ê ïðîèçâîëüíûì îáúåêòàì (íàïðèìåð, ñòðàíèöàì, áàçàì äàííûõ è òàê äàëåå) äðóãèì îáúåêòàì (íàïðèìåð, ïîëüçîâàòåëÿìè, óäàëåííûìè õîñòàìè è òàê äàëåå). 
Ýòî ïðåäïîëàãàåò ïîäðîáíûé êîíòðîëü äîñòóïà ñ ïðîñòûì óïðàâëåíèåì è âûñîêîé ñêîðîñòüþ. 
Ñêðèïò íàïèñàí íà PHP (îòñþäà åãî íàçâàíèå – phpGACL) – ýòî ïîïóëÿðíûé ñêðèïòîâûé ÿçûê, êîòîðûé îáû÷íî èñïîëüçóåòñÿ äëÿ äèíàìè÷åñêîãî ñîçäàíèÿ ñòðàíèö ñåòè. GACL ÷àñòü phpGACL – Ðîäîâîé ñïèñîê êîíòðîëÿ äîñòóïà. 
Ãäå âçÿòü?
PhpGACL õîñòèòñÿ íà sourceforge.net çäåñü http://phpGACL.sourceforge.net/ 
×òî íóæíî äëÿ çàïóñêà?
PhpGACL òðåáóåò ðåëÿöèîííóþ áàçó äàííûõ äëÿ õðàíåíèÿ èíôîðìàöèè î ïðàâàõ. Äîñòóï ê áàçå äàííûõ îñóùåñòâëÿåòñÿ ÷åðåç àáñòðàêòíûé êëàññ äîñòóïà ê áàçàì äàííûõ ADOdb (http://php.weblogs.com/adodb). Äàííûé êëàññ ïîçâîëÿåò ðàáîòàòü ñ òàêèìè áàçàìè äàííûõ êàê: PostgreSQL, MySQL, Oracle. 
Ïîñêîëüêó phpGACL íàïèñàí íà ÿçûêå PHP, òî îí òðåáóåò óñòàíîâêè PHP âåðñèè íå íèæå 4.2. ACL (Àäìèíèñòðèðîâàíèå ñïèñêà êîíòðîëÿ äîñòóïà) äîïîëíåíà âåá-èíòåðôåéñîì, ïîòîìó íåîáõîäèìî íàëè÷èå âåá-ñåðâåðà ñ ïîääåðæêîé PHP, íàïðèìåð, Apache (http://httpd.apache.org/). 
Àâòîðû
Mike Benoit (hide@address.com) – àâòîð è ìåíåäæåð ïðîåêòà. 
James Russel (james-hide@address.com) è 
Karsten Dambekalns (hide@address.com) – àâòîðû äîêóìåíòàöèè. 
Feskov Kuzma (hide@address.com) – ðóññêèé ïåðåâîä 
Ïîñëåäíÿÿ âåðñèÿ ïåðåâîäà âñåãäà çäåñü: http://php.russofile.ru 
Ââåäåíèå
Ïîíèìàíèå êîíòðîëÿ äåéñòâèÿ
Õàí – êàïèòàí “Ñîêîëà òûñÿ÷åëåòèÿ” è ×óâè – åãî âòîðîé îôèöåð. Îíè âçÿëè íà áîðò íåñêîëüêî ïàññàæèðîâ: Ëþêà, Îáè-Âàíà, R2-D2 è C3PO. Õàí äîëæåí îïðåäåëèòü îãðàíè÷åíèÿ äîñòóïà äëÿ ðàçëè÷íûõ ìåñò (êîìíàò) êîðàáëÿ, íàïðèìåð: êàáèíà, ìàøèííûé çàë, äâèãàòåëè è âíåøíåå îðóæèå. 
Õàí ñêàçàë: “ß è ×óâè ìîãóò èìåòü äîñòóï âñþäó, íî, ïîñëå îñîáåííî ãðÿçíîãî ðåìîíòà ãèïåðäâèãàòåëÿ, ÿ çàïðåùàþ ×óâè êîãäà-ëèáî ïîäõîäèòü ê ìàøèííîìó çàëó. Ïàññàæèðû îãðàíè÷åíû ïàññàæèðñêèì çàëîì”. 
Ñ ýòîãî ìîìåíòà, äàâàéòå áóäåì ñ÷èòàòü, ÷òî äîñòóï ÿâëÿåòñÿ Boolean (Áóëåâûì), òî åñòü, ðåçóëüòàò çàïðîñà íà äîñòóï ïåðñîíàæà ê êàêîìó-ëèáî ïîìåùåíèþ ÿâëÿåòñÿ “Ðàçðåøèòü” èëè “Íå ðàçðåøèòü”, è íåò íèêàêîãî ñðåäíåãî ðåçóëüòàòà. 
Åñëè ìû íàíåñåì ýòî óòâåðæäåíèå íà ìàòðèöó äîñòóïà, ïîêàçûâàþùóþ, êòî èìååò äîñòóï êóäà-ëèáî, òî ýòî áû âûãëÿäåëî ïðèìåðíî òàê (O – äîñòóï ðàçðåøåí, X – äîñòóï çàïðåùåí): 

Êòî / Êóäà  Êàáèíà Ïàññàæèðñêèé çàë Îðóæèå Ìàøèííûé çàë
 Õàí        O         O             O         O 
 ×óâè       O         O             O         X 
 Îáè-Âàí    X         O             X         X 
 Ëþê        X         O             X         X 
 R2D2       X         O             X         X
 C3PO       X         O             X         X


Êîëîíêè ïîêàçûâàþò ñïèñîê êîìíàò, ê êîòîðûì Õàí ìîæåò îãðàíè÷èòü äîñòóï, à ðÿäû ïîêàçûâàþò ïåðñîí, êîòîðûå ìîãëè áû çàïðîñèòü äîñòóï ê òåì èëè èíûì êîìíàòàì. Áîëåå øèðîêîå îáúÿñíåíèå: 
“êîìíàòû” - ýòî âåùè (îáúåêòû) äëÿ óïðàâëåíèÿ äîñòóïà ê íèì. Ìû íàçûâàåì ýòè îáúåêòû ACO (Access Control Objects - Îáúåêòû êîíòðîëÿ äîñòóïà); 
“ëþäè” - “âåùè (îáúåêòû), çàïðàøèâàþùèå äîñòóï”. Ìû íàçûâàåì èõ ARO (Access Request Objects - Îáúåêòû çàïðîñà äîñòóïà). Ëþäè çàïðàøèâàþò äîñòóï ê êîìíàòàì, èëè, â íàøåé òåðìèíîëîãèè, AROs çàïðàøèâàþò äîñòóï ê ACOs. 
Òàê æå åñòü òðåòèé òèï îáúåêòà – AXO (Access eXtension Objects – Îáúåêòû ðàñøèðåíèÿ äîñòóïà), íî î íåì ìû ïîãîâîðèì ïîçæå. Ýòè îáúåêòû èìåþò ìíîãî àòðèáóòîâ è óïîìèíàþòñÿ âìåñòå êàê Îáúåêòû äîñòóïà. 
Óïðàâëåíèå äîñòóïîì, èñïîëüçóÿ ìàòðèöó äîñòóïà, ïîäîáíîé âûøå, èìååò ïðåèìóùåñòâà è íåäîñòàòêè: 
Ïëþñû: 
î÷åíü ïîäðîáíûé – åñòü âîçìîæíîñòü óïðàâëåíèÿ äîñòóïîì íà óðîâíå êîíêðåòíîãî ÷åëîâåêà, åñëè åñòü òàêàÿ íåîáõîäèìîñòü; 
ëåãêî óâèäåòü, êòî èìååò äîñòóï è ê ÷åìó. Îòâåò íàõîäèòñÿ â ïåðåñå÷åíèè ÷åëîâåêà è êîìíàòû. 
Ìèíóñû: 
òðóäíî óïðàâëÿòü íà êðóïíîé ìàòðèöå äîñòóïà. 6 ïàññàæèðîâ è 4 ìåñòà – ýòî ïðîñòî, íî ÷òî, åñëè ó âàñ òûñÿ÷è ïàññàæèðîâ è ñîòíè ìåñò, è âû äîëæíû îãðàíè÷èòü äîñòóï áîëüøèìè ãðóïïàìè è ñðàçó, íî ñîõðàíèòü ïðè ýòîì ïîäðîáíûé êîíòðîëü äëÿ îòäåëüíîãî èíäèâèäóóìà? Ýòî îçíà÷àëî áû áîëüøîå è òðóäîåìêîå ðåãóëèðîâàíèå ìàòðèöû, à òàê æå ïîñòàâèëî áû î÷åíü òðóäíóþ çàäà÷ó ïðîâåðêè ìàòðèöû íà ïðàâèëüíîñòü; 
òðóäíî ñóììèðîâàòü è âèçóàëèçèðîâàòü. Ïðåäûäóùèé ïðèìåð äîâîëüíî ïðîñò, åãî ìîæíî çàïèñàòü â íåñêîëüêî ïðåäëîæåíèé (ñìîòðèòå âûñêàçûâàíèå Õàíà), íî ÷òî, åñëè ìàòðèöà íàïîìèíàåò òàêóþ? 

Êòî / Êóäà  Êàáèíà Ïàññàæèðñêèé çàë Îðóæèå Ìàøèííûé çàë
 Õàí        O         O             O         O 
 ×óâè       O         X             O         X 
 Îáè-Âàí    X         O             X         X 
 Ëþê        O         O             O         X 
 R2D2       X         O             X         O
 C3PO       O         O             X         O

Ýòà ìàòðèöà íå íà ñòîëüêî î÷åâèäíà äëÿ ñóììèðîâàíèÿ, è íå ïîíÿòíà äëÿ ÷èòàòåëÿ, ïî÷åìó òå èëè èíûå ðåøåíèÿ áûëè ïðèíÿòû. 
Óïðàâëåíèå êîíòðîëåì äîñòóïà ïðè ïîìîùè phpGACL
ßñíî, ÷òî äëÿ êîíòðîëÿ íàä áîëüøèìè ñèñòåìàìè è ñëîæíûìè ñèòóàöèÿìè ýòîò ïîäõîä “ìàòðèöû äîñòóïà” ÿâëÿåòñÿ íåïîäõîäÿùèì. Ìû íóæäàåìñÿ â ëó÷øåé ñèñòåìå, êîòîðàÿ ïîääåðæèâàåò ïëþñû (ïîäðîáíûé êîíòðîëü è ïîíÿòíóþ âèçóàëèçàöèþ òîãî, êòî èìååò èìååò äîñòóï è ê ÷åìó) è óäàëÿåò íåóäîáñòâà (òðóäíîñòü ñóììèðîâàíèÿ, òðóäíîñòü óïðàâëåíèÿ áîëüøèìè ãðóïïàìè ëþäåé ñðàçó). Îäíî ðåøåíèå – phpGACL. 
PhpGACL íå îïèñûâàåò äîñòóï îò “âîñõîäÿùåãî” ïîäîáíî ìàòðèöå äîñòóïà âûøå. Âìåñòî ýòîãî, îïèñûâàåò äîñòóï ñâåðõó âíèç, ïîäîáíî òåêñòîâîìó îïèñàíèþ ïîëèòèêè äîñòóïà Õàíà. Ýòî – î÷åíü ãèáêàÿ ñèñòåìà, êîòîðàÿ ïîçâîëÿåò âàì óïðàâëÿòü äîñòóïîì â áîëüøèõ ãðóïïàõ, òàê æå ïîçâîëÿåò àêêóðàòíî ñóììèðîâàòü ïîëèòèêó äîñòóïà è ëåãêî âèäåòü, êòî èìååò ïðàâî íà äîñòóï è ê ÷åìó. 
ARO-äåðåâî îïðåäåëÿåò èåðàðõèþ ãðóïï AROs (îáúåêòîâ çàïðîñà äîñòóïà). Ýòî ïîäîáíî ïðåäñòàâëåíèþ äåðåâà ïàïîê è ôàéëîâ. “Ïàïêè” - ãðóïïû, “ôàéëû” - AROs. 
Äàâàéòå ïîïðîáóåì ñîñòàâèòü ACL-äåðåâî äëÿ ëþäåé íà ñóäíå Õàíà. Ñíà÷àëà ìû îïðåäåëèì íåêîòîðûå êàòåãîðèè äëÿ ëþäåé. ßñíî, ÷òî Õàí è ×óâè óïðàâëÿþò ñóäíîì, à îñòàëüíûå îáúåêòû – ýòî òîëüêî ïàññàæèðû. 
Ïàññàæèðû Ñîêîëà òûñÿ÷èëåòèÿ    Ãðóïïà
??Êîìàíäà                       Ãðóïïà
? ??Õàí                         ARO
? ??×óâè                        ARO
??Ïàññàæèðû                     Ãðóïïà
  ??Îáè-Âàí                     ARO
  ??Ëþê                         ARO
  ??R2-D2                       ARO
  ??C3PO                        ARO
Ýòî äåðåâî íå îïðåäåëÿåò íèêàêîé ïîëèòèêè, îíî ïðîñòî ïîêàçûâàåò, êàêèì îáðàçîì ìû ãðóïïèðóåì ëþäåé, êîòîðûå ìîãëè áû çàïðîñèòü äîñòóï (AROs). 
Ìû çàäàåì îãðàíè÷åíèÿ äîñòóïà, ñîçäàâàÿ èíñòðóêöèè äëÿ îïðåäåëåííîé êîìíàòû (ACO) êàêîé-òî ãðóïïå èëè AROs â äåðåâå. Õàí ãîâîðèò: “Ïî óìîë÷àíèþ íèêîìó íåëüçÿ íàçíà÷èòü äîñòóï íè ê îäíîé èç êîìíàò íà Ñîêîëå òûñÿ÷åëåòèÿ. Íî êîìàíäà äîëæíà èìåòü äîñòóï ê êàæäîé êîìíàòå. Ïàññàæèðû äîëæíû èìåòü äîñòóï òîëüêî ê ïàññàæèðñêîìó çàëó”. 
Ïàññàæèðû Ñîêîëà òûñÿ÷èëåòèÿ
??Êîìàíäà                       [ALLOW: ALL] (ðàçðåøèòü: âñå)
? ??Õàí
? ??×óâè
??Ïàññàæèðû                     [ALLOW: Lounge] (ðàçðåøèòü: ïàññàæèðñêèé çàë)
  ??Îáè-Âàí
  ??Ëþê
  ??R2D2
  ??C3PO
×òîáû èíòåðïðåòèðîâàòü íàøå ARO-äåðåâî, ìû íà÷èíàåì ñ âåðøèíû è äâèãàåìñÿ âíèç. 
Âî-ïåðâûõ, ïîëèòèêà ïî óìîë÷àíèþ ñîñòîèò â òîì, ÷òîáû çàïðåòèòü äîñòóï êî âñåìó. Îãðàíè÷åíèÿ áûëè èçìåíåíû òîëüêî äëÿ êîìàíäû, òàê ÷òî îíè òåïåðü èìåþò äîñòóï êî âñåìó (ALL – ñèíîíèì äëÿ âñåõ êîìíàò (êàáèíà, ìàøèííûé çàë, ïàññàæèðñêèé çàë è îðóæèå). Ïàññàæèðû èìåþò òîëüêî äîñòóï ê ïàññàæèðñêîìó çàëó. 
Òàêîé ñïîñîá îïèñûâàòü ïîëèòèêó äîñòóïà áîëåå ÿñåí ÷åì ìàòðèöà äîñòóïà. Âû ìîæåòå ëåãêî âèäåòü êòî èìååò äîñòóï ê ÷åìó, à òàê æå áîëåå ëåãêî îïðåäåëèòü, ïî÷åìó îíè èìåþò ýòîò äîñòóï (êàæåòñÿ î÷åâèäíûì, ÷òî Õàí è ×óâè èìåþò äîñòóï êî âñåìó, òàê êàê îíè ñãðóïïèðîâàíû ⠓Êîìàíäó”). 
Ñóììèðóåì: 
ACO (îáúåêòû êîíòðîëÿ äîñòóïà) – âåùè, äîñòóïîì ê êîòîðûì ìû õîòèì óïðàâëÿòü (íàïðèìåð ñòðàíèöû ñåòè, áàçû äàííûõ, êîìíàòû è òàê äàëåå); 
ARO (îáúåêòû çàïðîñà äîñòóïà) – âåùè, êîòîðûå çàïðàøèâàþò äîñòóï (íàïðèìåð, ëþäè, îòäàëåííûå êîìïüþòåðû è òàê äàëåå); 
ARO-äåðåâüÿ – îïðåäåëÿþò èåðàðõèþ Ãðóïï è AROs. Ãðóïïû ìîãóò ñîäåðæàòü äðóãèå ãðóïïû è AROs; 
ïîëèòèêà ïî óìîë÷àíèþ äëÿ äåðåâà – çàïðåòèòü âñå (DENY: ALL); 
÷òîáû îïðåäåëèòü ïîëèòèêó äîñòóïà, äâèãàéòåñü âíèç ïî äåðåâó, ÿâíî íàçíà÷àÿ ðàçðåøåíèÿ Ãðóïïàì è AROs äëÿ êàæäîãî ACO, åñëè â ýòîì âîçíèêàåò ïîòðåáíîñòü. 
Ïîäðîáíûé êîíòðîëü äîñòóïà
Îé, ìû êàæåòñÿ çàáûëè ïðî ×óâè! Îòíåñÿ åãî ê êîìàíäå Õàí êîñâåííî äàë åìó äîñòóï â ìàøèííûé çàë! Íî, åñëè ïîìíèòå, îí íå õîòåë ýòîãî äåëàòü. Îí íå õî÷åò ýòîãî ïîñëå òîãî, êàê ×óâè íåäàâíî ðåìîíòèðîâàë ãèïåðäâèãàòåëü. Õàí äîáàâëÿåò ïðàâèëî çàïðåùåíèÿ äëÿ ×óâè: 
Ïàññàæèðû Ñîêîëà òûñÿ÷èëåòèÿ
??Êîìàíäà                    [ALLOW: ALL] (ðàçðåøèòü: âñå)
? ??Õàí
? ??×óâè                     [DENY: Engines] (çàïðåòèòü: ìàøèííûé çàë)
??Ïàññàæèðû                  [ALLOW: Lounge] (ðàçðåøèòü: ïàññàæèðñêèé çàë)
  ??Îáè-Âàí
  ??Ëþê
  ??R2D2
  ??C3PO
Ýòî ïðèìåð òîãî, êàê âû ìîæåòå óïðàâëÿòü ïîëèòèêîé äîñòóïà â ïîäðîáíîé ìàíåðå. Íåò íåîáõîäèìîñòè ïåðåìåùàòü ×óâè â äðóãóþ ãðóïïó, ìû ïðîñòî çàïðåùàåì åìó íà áîëåå íèçêîì óðîâíå. 
Äðóãîé ïðèìåð ïîäðîáíîãî êîíòðîëÿ ìîæåò âîçíèêíóòü, êîãäà íà êîðàáëü íàïàëà Èìïåðèÿ. Õàí äîëæåí ïîçâîëèòü ÷åëîâåêó Ëþêó èñïîëüçîâàòü îðóæèå è ïîçâîëèòü ðîáîòó R2D2 âîññòàíîâèòü ãèïåðäâèãàòåëü â ìàøèííîì çàëå. Îí ìîæåò ñäåëàòü ýòî ðàñøèðèâ èõ ïîëíîìî÷èÿ, êîòîðûå îïðåäåëåíû èì îáùèì ñòàòóñîì ãðóïïû “Ïàññàæèð”: 
Ïàññàæèðû Ñîêîëà òûñÿ÷èëåòèÿ
??Êîìàíäà                    [ALLOW: ALL] (ðàçðåøèòü: âñå)
? ??Õàí
? ??×óâè                     [DENY: Engines] (çàïðåòèòü: ìàøèííûé çàë)
??Ïàññàæèðû                  [ALLOW: Lounge] (ðàçðåøèòü: ïàññàæèðñêèé çàë)
  ??Îáè-Âàí
  ??Ëþê                      [ALLOW: Guns] (ðàçðåøèòü: îðóæèå)
  ??R2D2                     [ALLOW: Engines] (ðàçðåøèòü: ìàøèííûé çàë)
  ??C3PO
Ìíîãîóðîâíåâûå ãðóïïû
Ãðóïïû ìîãóò áûòü ðàñøèðåíû íà ëþáîé óðîâåíü â ARO-äåðåâå. Íàïðèìåð, ìû ìîãëè áû äîáàâèòü ãðóïïó “Äæåäàè” ê “Ïàññàæèðàì”. Áîëüøèíñòâî ïàññàæèðîâ áûëî áû êàòåãîðèçèðîâàíî ïðè “Ïàññàæèðàõ”, íî Ëþê è Îáè-Âàí áóäóò âûäåëåíû ⠓Äæåäàè” è ïîýòîìó ìîãóò èìåòü íåêîòîðûå ïðèâåëåãèè (íàïðèìåð, äîñòóï â êàáèíó): 
Ïàññàæèðû Ñîêîëà òûñÿ÷èëåòèÿ
??Êîìàíäà                    [ALLOW: ALL] (ðàçðåøèòü: âñå)
? ??Õàí
? ??×óâè                     [DENY: Engines] (çàïðåòèòü: ìàøèííûé çàë)
??Ïàññàæèðû                  [ALLOW: Lounge] (ðàçðåøèòü: ïàññàæèðñêèé çàë)
  ??Äæåäàè                   [ALLOW: Cockpit] (ðàçðåøèòü: êàáèíó)
  ? ??Îáè-Âàí
  ? ??Ëþê                    [ALLOW: Guns] (ðàçðåøèòü: îðóæèå) 
  ??R2D2                     [ALLOW: Engines] (ðàçðåøèòü: ìàøèííîå îòäåëåíèå)
  ??C3PO
Êàê phpGACL îïðåäåëÿåò ðàçðåøåíèÿ?
Êîãäà êîìïüþòåð ñóäíà (ñ çàïóùåííûì phpGACL êîíå÷íî æå) ïðîâåðÿåò äîñòóï, åäèíñòâåííûé âîïðîñ, êîòîðûé îí ìîæåò çàäàòü ñåáå - “èìååò ëè ÷åëîâåê X äîñòóï ê ìåñòó Y?” Íà ÿçûêå phpGACL ýòî áóäåò âûãëÿäåòü òàê: “Ìîæåò ëè ARO X èìåòü äîñòóï ê ACO Y?” 
phpGACL îïðåäåëÿåò, èìååò ëè îïðåäåëåííûé ÷åëîâåê äîñòóï ê îïðåäåëåííîìó ìåñòó ñëåäóÿ îò âåðøèíû äåðåâà ê óêàçàííîìó ÷åëîâåêó, îòìå÷àÿ ïî ïóòè ÿâíûé êîíòðîëü äîñòóïà äëÿ òîãî ìåñòà. Êîãäà ìû äîñòèãàåì íóæíîãî ÷åëîâåêà, ïîëó÷àåì êîíêðåòíûé óðîâåíü äîñòóïà êîòîðûé è ÿâëÿåòñÿ êîíå÷íûì ðåçóëüòàòîì äëÿ âîçâðàùåíèÿ. Òàêèì îáðàçîì ìû îñóùåñòâëÿåì êîíòðîëü äîñòóïà äëÿ ãðóïï, ëþäåé, íî èìååì âîçìîæíîñòü ðàñøèðÿòü ýòè óðîâíè åñëè íóæíî. 
Ïðèìåð 1. Ìû ñïðàøèâàåì: Èìååò ëè Ëþê äîñòóï ê ïàññàæèðñêîìó çàëó?” 
óñòàíàâëèâàåì ïðàâèëî ïî óìîë÷àíèþ DENY (çàïðåòèòü); 
äâèãàåìñÿ ïî äåðåâó ê Ëþêó: Ïàññàæèðû Ñîêîëà òûñÿ÷åëåòèÿ -> Ïàññàæèðû -> Äæåäàè -> Ëþê; 
íà÷èíàåì ñ âåðøèíû äåðåâà è äâèãàåìñÿ ê Ëþêó: “óçåë” “Ïàññàæèðû Ñîêîëà òûñÿ÷åëåòèÿ” íå ãîâîðèò íè íè÷åãî íå îá îäíîì èç ACO. Îñòàâëÿåì DENY (çàïðåò); 
èäåì äàëüøå, “Ïàññàæèðû” - ÿâíî ãîâîðèò, ÷òî “Ïàññàæèðû” èìåþò äîñòóï ê “ïàññàæèðñêîìó çàëó”. Ìåíÿåì âíóòðåííèé ðåçóëüòàò íà “ALLOW” (ðàçðåøèòü); 
äâèãàåìñÿ â óçåë “Äæåäàè” - îí íå óïîìèíàåò “ïàññàæèðñêîãî çàëà” âîîáùå – îñòàâëÿåì ïðåäûäóùèé ðåçóëüòàò; 
äâèãàåìñÿ â óçåë “Ëþê” - ñíîâà íåò íè÷åãî î “ïàññàæèðñêîì çàëå” - îñòàâëÿåì ïðåäûäóùèé ðåçóëüòàò; 
èäòè äàëüøå íåêóäà – îñòàíàâëèâàåìñÿ. Âîçâðàùàåìûé ðåçóëüòàò áóäåò “ALLOW” (ðàçðåøèòü). 
Ïðèìåð 2. Ìû ñïðàøèâàåì: “Èìååò ëè ×óâè äîñòóï â ìàøèííûé çàë?” 
óñòàíàâëèâàåì ïðàâèëî ïî óìîë÷àíèþ DENY (çàïðåòèòü); 
äâèãàåìñÿ ïî äåðåâó ê ×óâè: Ïàññàæèðû Ñîêîëà òûñÿ÷åëåòèÿ -> Êîìàíäà -> ×óâè; 
íà÷èíàåì ñ âåðøèíû äåðåâà è äâèãàåìñÿ ê ×óâè: “óçåë” “Ïàññàæèðû Ñîêîëà òûñÿ÷åëåòèÿ” íå ãîâîðèò íè íè÷åãî íå îá îäíîì èç ACO. Îñòàâëÿåì DENY (çàïðåò); 
èäåì äàëüøå â óçåë “Êîìàíäà” - ÿâíî ãîâîðèò íàì - “Êîìàíäà” èìååò äîñòóï ê “ìàøèííîìó çàëó” - ìåíÿåì âíóòðåííèé ðåçóëüòàò íà “ALLOW” (ðàçðåøèòü); 
äâèãàåìñÿ â óçåë “×óâè” - åñòü ÿâíîå çàïðåùåíèå, êîòîðîå ãîâîðèò íàì, ÷òî äîñòóï ⠓ìàøèííûé çàë” çàêðûò. Ìåíÿåì âíóòðåííèé ðåçóëüòàò íà “DENY” (çàïðåòèòü); 
èäòè äàëüøå íåêóäà, âîçâðàùàåì ðåçóëüòàò “DENY” (çàïðåòèòü). 
Âû ìîæåòå âèäåòü, ÷òî åñëè ãðóïïà ÿâíî íå îïðåäåëÿåò íèêàêèõ ïðàâ, òî îíà íàñëåäóåò èõ îò ðîäèòåëüñêîé ãðóïïû (ïðåäûäóùåé).Åñëè óçåë êîðíÿ (“Ïàññàæèðû Ñîêîëà òûñÿ÷åëåòèÿ”) íå îïðåäåëÿåò íèêàêèõ ðàçðåøåíèé, òî îí íàñëåäóåò ðàçðåøåíèÿ ïî óìîë÷àíèþ.  äàííîì ñëó÷àå “DENY ALL” (çàïðåòèòü âñå). 
Ýòî ïîäðàçóìåâàåò íåñêîëüêî èíòåðåñíûõ ìîìåíòîâ îá ARO-äåðåâå: 
ARO-äåðåâî âñåãäà ïîêàçûâàåò ïîëíûé ñïèñîê AROs. Ïîýòîìó íå èìååò ñìûñë ñïðàøèâàòü, èìååò ëè äîñòóï ê êàáèíå Äæàááà, ïîñêîëüêó îí íå áûë îïðåäåëåí â ñèñòåìå. Îäíàêî, phpGACL íå ïðîâåðÿåò ñóùåñòâóåò ëè ARO èëè ACO ïåðåä âûïîëíåíèåì ïðîâåðêè. Òàê, åñëè áû òàêîé âîïðîñ äåéñòâèòåëüíî èìåë áû ìåñòî, îòâåò òûë áû “DENY” (çàïðåòèòü); 
ARO-äåðåâî ìîæåò íå ïîêàçûâàòü íåêîòîðûå îïðåäåëåíèÿ ACO åñëè îíè ñïåöèàëüíî íå îïðåäåëåíû â ARO-äåðåâå. Íàïðèìåð, Õàí îïðåäåëèë ACO “âàííàÿ êîìíàòà”. Ëþáîé âîïðîñ, ïîäîáíûé ýòîìó: “èìååò ëè Ëþê äîñòóï â âàííóþ êîìíàòó?”, äàñò îòðèöàòåëüíûé îòâåò “DENY” (çàïðåùåíî), ïîñêîëüêó íèãäå â ARO-äåðåâå “âàííàÿ êîìíàòà” íå óïîìèíàåòñÿ. Èìåéòå ââèäó, ïðè èññëåäîâàíèè ARO-äåðåâà, íåêîòîðûå ACO ìîãóò áûòü íå âèäèìûìè. 
Îáðàòèòå âíèìàíèå: ïðè âûÿñíåíèè ÷åðåç phpGACL âîïðîñîâ î äîñòóïå íåâîçìîæíî èñïîëüçîâàòü Ãðóïïû êàê AROs (äàæå ïðè òîì, ÷òî ýòî ìîæåò êàçàòüñÿ ïðàâèëüíûì). Íàïðèìåð, íåâîçìîæíî îòâåòèòü íà âîïðîñ “Êàêèå ïàññàæèðû èìåþò äîñòóï ê îðóæèþ?” Ïîëíûé îòâåò íå Boolean (íå Áóëåâûé) – DENY / ALLOW (îòðèöàþ / ïîçâîëÿþ), à áîëåå ñëîæíûé “Ëþê è Îáè-Âàí ìîãóò, à R2D2 è Ñ3PO íåò”. PhpGACL íå ïðåäíàçíà÷åí äëÿ òàêîãî âèäà îòâåòîâ. 
Äîáàâëåíèå ãðóïï
Õàí âèäèò, ÷òî ACL íà÷èíàåò âûãëÿäåòü î÷åíü ñëîæíî. Åñòü î÷åíü ìíîãî èñêëþ÷åíèé. Âîçìîæíî, ñëåäóåò ñäåëàòü ïîäðóãîìó, íàïðèìåð, ñîçäàòü íîâóþ ãðóïïó “Èíæåíåðû”, êîòîðàÿ áóäåò ñîäåðæàòü ëþäåé, êîòîðûì ïîçâîëåí äîñòóï â ìàøèííîå îòäåëåíèå è îðóæèþ. Ýòà ãðóïïà äîëæíà ñîäåðæàòü Õàíà è R2D2, òàê êàê îíè ìîãóò âîññòàíîâèòü äâèãàòåëü è îðóæèå. Ýòî ïîçâîëÿåò Õàíó óäàëèòü íåêîòîðûå èç “ãðÿçíûõ” ïðàâèë-èñêëþ÷åíèé, ýòî äàåò îïðåäåëåííóþ âûãîäó â òîì, ÷òî äàåò ÿñíîå îïèñàíèå: 
Ïî óìîë÷àíèþ:                [DENY: ALL] (çàïðåòèòü: âñå)
Ïàññàæèðû Ñîêîëà òûñÿ÷èëåòèÿ
??Êîìàíäà                    [ALLOW: ALL] (ðàçðåøèòü: âñå)
? ??Õàí
? ??×óâè                     [DENY: Engines] (çàïðåòèòü: ìàøèííûé çàë)
??Ïàññàæèðû                  [ALLOW: Lounge] (ðàçðåøèòü: ïàññàæèðñêèé çàë)
? ??Äæåäàè                   [ALLOW: Cockpit] (ðàçðåøèòü: êàáèíó)
? ? ??Îáè-Âàí
? ? ??Ëþê                    [ALLOW: Guns] (ðàçðåøèòü: îðóæèå) 
? ??R2D2
? ??C3PO
??Èíæåíåðû                   [ALLOW: Engines, Guns] (ðàçðåøèòü: ìàø.çàë, îðóæèå)
  ??Õàí
  ??R2D2
Âû ìîæåòå ïðî÷èòàòü ýòî ñëåäóþùèì îáðàçîì: ïî óìîë÷àíèþ íèêòî íèêóäà íå èìååò ïðàâî çàõîäèòü, êîìàíäà èìååò äîñòóï âñþäó (êðîìå ×óâè, îí íå èìååò äîñòóïà â ìàøèííîå îòäåëåíèå). Ïàññàæèðû èìåþò äîñòóï òîëüêî ê ïàññàæèðñêîìó çàëó, êðîìå Äæåäàåâ, îíè èìåþò äîñòóï ê êàáèíå. Ëþê òàêæå èìååò äîñòóï ê îðóæèþ. Èíæåíåðû èìåþò äîñòóï ê îðóæèþ è ìàøèííîìó îòäåëåíèþ. 
Íàèáîëåå âàæíî, ìû ìîæåì âèäåòü, ÷òî Õàí è R2D2 íàõîäÿòñÿ òåïåðü â äâóõ ìåñòàõ ACL. Èì íåò íåîáõîäèìîñòè áûòü óíèêàëüíûìè. Ýòî äåëàåò ïîëèòèêè áîëåå ÿñíûìè äëÿ ÷èòàòåëÿ: “Àõ, Õàí è R2D2 èìåþò äîñòóï ê îðóæèþ è ìàøèííîìó çàëó, ïîòîìó ÷òî îíè èíæåíåðû”. 
Äîáàâëåíèå ëþäåé
Õàí èäåò â Ãîðîä îáëàêîâ, ÷òîáû ïîâèäàòü Ëàíäî è ñäåëàòü íåêîòîðûé ðåìîíò. Ëàíäî – ïðåäûäóùèé õîçÿèí Ñîêîëà òûñÿ÷åëåòèÿ, Õàí ïðåäïîëàãàåò îòíåñòè åãî ê ãðóïïå “Êîìàíäà”. Ëàíäî òàê æå ïðåäëàãàåò óñëóãè ñâîåãî ãëàâíîãî èíæåíåðà Õîíòóêà, äëÿ ïîìîùè â âîññòàíîâëåíèè ñóäíà, ïîêà îíî íàõîäèòñÿ â äîêå. 
Ïî óìîë÷àíèþ:                 [DENY: ALL] (çàïðåòèòü: âñå)
Ïàññàæèðû Ñîêîëà òûñÿ÷åëåòèÿ
??Êîìàíäà                     [ALLOW: ALL] (ðàçðåøèòü: âñå)
? ??Õàí
? ??×óâè                      [DENY: Engines] (çàïðåòèòü: ìàøèííûé çàë)
? ??Ëàíäî
??Ïàññàæèðû                   [ALLOW: Lounge] (ðàçðåøèòü: ïàññàæèðñêèé çàë)
? ??Äæåäàè                    [ALLOW: Cockpit] (ðàçðåøèòü: êàáèíà)
? ? ??Îáè-Âàí
? ? ??Ëþê                     [ALLOW: Guns] (ðàçðåøèòü: îðóæèå) 
? ??R2D2
? ??C3PO
??Èíæåíåðû                    [ALLOW: Engines, Guns] (ðàçðåøèòü: ìàø.çàë, îðóæèå)
  ??Õàí
  ??R2D2
  ??Õàíòóê
Ýòî äåðåâî ïîêàçûâàåò êàê ëåãêî ìîæíî ïðåäîñòàâëÿòü äîñòóï íîâûì ëþäÿì. Åñëè áû ìû èñïîëüçîâàëè ïåðâîíà÷àëüíóþ ìàòðè÷íóþ ñõåìó, ìû äîëæíû áûëè áû óñòàíîâèòü ðàçðåøåíèÿ äëÿ êàæäîãî ìåñòà íà êîðàáëå è äëÿ Õàíóêà è äëÿ Ëàíäî. Âìåñòî ýòîãî, ìû ïðîñòî äîáàâëÿåì èõ ê íóæíûì ãðóïïàì, â ðåçóëüòàòå ÷åãî, èõ äîñòóï íåÿâíî è ëåãêî îïðåäåëåí. 
Óñòðàíåíèå êîíôëèêòîâ
×òî ñëó÷èòñÿ, åñëè ìû äîáàâèì ×óâè ê ñïèñêó èíæåíåðîâ? 
Ïî óìîë÷àíèþ:                 [DENY: ALL] (çàïðåòèòü: âñå)
Ïàññàæèðû Ñîêîëà òûñÿ÷åëåòèÿ
??Êîìàíäà                     [ALLOW: ALL] (ðàçðåøèòü: âñå)
? ??Õàí
? ??×óâè                      [DENY: Engines] (çàïðåòèòü: ìàøèííûé çàë)
? ??Ëàíäî
??Ïàññàæèðû                   [ALLOW: Lounge] (ðàçðåøèòü: ïàññàæèðñêèé çàë)
? ??Äæåäàè                    [ALLOW: Cockpit] (ðàçðåøèòü: êàáèíà)
? ? ??Îáè-Âàí
? ? ??Ëþê                     [ALLOW: Guns] (ðàçðåøèòü: îðóæèå) 
? ??R2D2
? ??C3PO
??Èíæåíåðû                    [ALLOW: Engines, Guns] (ðàçðåøèòü: ìàø.çàë, îðóæèå)
  ??Õàí
  ??R2D2
  ??Õàíóê
  ??×óâè
Ýòî äåëàåò äîñòóï ×óâè ê ìàøèííîìó çàëó íåîäíîçíà÷íûì, ïîòîìó ÷òî òåïåðü åñòü äâå äîðîæêè îò êîðíÿ äåðåâà äî ×óâè. Åñëè êîìïüþòåð ïîñëåäóåò ïî îäíîé äîðîæêå, òî ðåçóëüòàò áóäåò “DENY” (çàïðåùàþ), à åñëè îí ïîñëåäóåò çà äðóãîé äîðîæêîé, òî ðåçóëüòàò áóäåò “ALLOW” (ðàçðåøàþ). Òàê âñå æå, åìó çàïðåùåí èëè ðàçðåøåí äîñòóï? 
PhpGACL ïðåäóïðåäèò âàñ, åñëè âû ñãðóïïèðóåòå ARO òàêèì îáðàçîì, ÷òî äîñòóï ARO ê ïðîèçâîëüíîìó ACO áóäåò íåîäíîçíà÷íûì. Íî ðåøàòü êîíôëèêò ïðèäåòñÿ âàì. 
Åñëè ïðè òàêîé íåîäíîçíà÷íîñòè ñïðîñèòü êîìïüþòåð “Èìååò ëè ×óâè äîñòóï ê ìàøèííîìó çàëó?”, òî îòâåò áóäåò “ALLOW” (ðàçðåøàþ), ïîòîìó ÷òî ñèñòåìà âåðíåò âàì ïîñëåäíèé èçìåíåííûé ïàðàìåòð (ýòî ïîëèòèêà phpGACL).  ýòîì ñëó÷àå ðåçóëüòàò “ALLOW”, ïîòîìó ÷òî ðàçðåøåíèå “ALLOW: Engines, Guns” (ðàçðåøèòü: ìàøèííûé çàë, îðóæèå), íàçíà÷åííîå íà ãðóïïó “Èíæåíåðû”, ÿâëÿåòñÿ áîëåå ñâåæèì, ïî ñðàâíåíèþ ñ “DENY: Engines” (çàïðåòèòü: ìàøèííûé çàë) ãðóïïû “×óâè”. 
 ñëó÷àå, åñëè ACL ñîäåðæèò íåîäíîçíà÷íîñòè, òàêóþ ACL íàçûâàþò íåïîñëåäîâàòåëüíîé. Íåïîñëåäîâàòåëüíàÿ ACL ìîæåò áûòü î÷åíü îïàñíà, âû ìîæåòå íåâîëüíî îáåñïå÷èòü äîñòóï íåñîîòâåòñòâóþùèì ëþäÿì. Êîãäà phpGACL ïðåäóïðåæäàåò âàñ î òîì, ÷òî ACL íåïîñëåäîâàòåëüíà, ðàçðåøèòå êîíôëèêò êàê ìîæíî áîëåå îïåðàòèâíî, ÷òîáû ñðàçó âîññòàíîâèòü ïîñëåäîâàòåëüíîñòü. 
×òîáû ðåøèòü êîíôëèêò, âû ìîãëè ñäåëàòü ñëåäóþùåå: 
óäàëèòü äåðåêòèâó “DENY: Engines” ó ãðóïïû “×óâè” â ãðóïïå “Êîìàíäà”; 
äîáàâèòü äåðåêòèâó “DENY: Engines” ó ãðóïïû “×óâè” â ãðóïïå “Èíæåíåðû”; 
óäàëèòü ×óâè èç ãðóïïû “Èíæåíåðû”, òàê êàê Õàí âñåðàâíî íå ñ÷èòàåò åãî äîñòîéíûì èíæåíåðîì. 
Õà âûáðàë ïîñëåäíèé âàðèàíò, îí óäàëèë ×óâè èç ãðóïïû “Èíæåíåðû”. 
Îáîçíà÷åíèå îáúåêòîâ äîñòóïà
phpGACL óíèêàëüíî èäåíòèôèöèðóåò êàæäûé îáúåêò äîñòóïà (ARO, AXO, ACO) êîìáèíàöèåé èõ äâóõ êëþ÷åâûõ ñëîâ è èõ òèïà îáúåêòà äîñòóïà. 
Êîðòåæ “(Òèï îáúåêòà äîñòóïà, Ðàçäåë, Çíà÷åíèå)” óíèêàëüíî èäåíòèôèöèðóåò ëþáîé îáúåêò äîñòóïà. 
Ïåðâûé ýëåìåíò êîðòåæà – òèï îáúåêòà äîñòóïà (ARO, AXO, ACO). 
Âòîðîé ýëåìåíò êîðòåæà, íàçâàííûé Ðàçäåëîì, ÿâëÿåòñÿ, çàäàííîé ïîëüçîâàòåëåì, ñòðîêîé, êîòîðàÿ íàçûâàåò îáùóþ êàòåãîðèþ îáúåêòà äîñòóïà. Îáúåêòû ñ íåñêîëüêèìè äîñòóïàìè ìîãóò èìåòü òîæå ñàìîå íàçâàíèå Ðàçäåëà. Íàçâàíèå ðàçäåëà äîëæíî áûòü êîðîòêîå, íî îïèñàòåëüíîå (íàãëÿäíîå). Ýòî èñïîëüçóåòñÿ â ïîëüçîâàòåëüñêîì èíòåðôåéñå â ñïèñêàõ âûáîðà, ïîýòîìó ëîãè÷íî íå äåëàòü èõ ñëèøêîì äëèííûìè. 
Ðàçäåëû ñîõðàíÿþòñÿ â ÿ÷åéêå namespace. Ðàçäåëû íå èìåþò íèêàêîãî îòíîøåíèÿ ê ãðóïïàì èëè ARO / AXO-äåðåâüÿì – îíè ïðîñòî ìåõàíèçì, äëÿ òîãî ÷òîáû ïîìî÷ü ïîääåðæèâàòü áîëüøåå êîëè÷åñòâî îáúåêòîâ äîñòóïà. 
Òðåòèé ýëåìåíò êîðòåæà – îïðåäåëåííîå ïîëüçîâàòåëåì, íàçâàíèå äëÿ îáúåêòà äîñòóïà, è íàçûâàåòñÿ Çíà÷åíèå. Çíà÷åíèå íå ìîæåò ñîäåðæàòü ïðîáåëû (îäíàêî, Ðàçäåë – ìîæåò). 
Íàçâàíèÿ Ðàçäåëîâ è Çíà÷åíèå ðåãèñòðîçàâèñèìû. 
Ïðèìå÷àíèå: îáû÷íî ñïðàøèâàþò, ïî÷åìó äëÿ èäåíòèôèêàöèè îáúåêòîâ äîñòóïà èñïîëüçóþòñÿ ñòðîêè à íå öåëûå ÷èñëà, êîòîðûå, ÿêîáû, êàæóòñÿ áûñòðåå. Îòâåò – äëÿ ÿñíîñòè. Íà ìíîãî áîëåå ëåãêî ïîíÿòü: 
acl_check('system', 'login', 'user', 'john_doe'); ÷åì: 
acl_check(10, 21004, 15, 20304); 
Òàê êàê èç êîíòåêñòà ÷àñòî î÷åâèäíî ê êàêîìó òèïó îáúåêòà äîñòóïà ìû îáðàùàåìñÿ, èíòåðôåéñ äëÿ phpGACL (è ýòà äîêóìåíòàöèÿ) îïóñêàåò òèï îáúåêòà äîñòóïà è èñïîëüçóåò ôîðìàò “Ðàçäåë -> Çíà÷åíèå” äëÿ ïîêàçà îáúåêòà äîñòóïà. Îäíàêî, ïðîãðàììíûé èíòåðôåéñ ïðèëîæåíèÿ òðåáóåò “Ðàçäåë” îáúåêòà äîñòóïà è “Çíà÷åíèå”, êîòîðûå äîëæíû áûòü îïðåäåëåíû â îòäåëüíûõ àðãóìåíòàõ ôóíêöèè (òèï îáúåêòà äîñòóïà îáû÷íî íåÿâåí â îïèñàíèè àðãóìåíòà). 
Ïðèìåð ACO “Ðàçäåë -> Çíà÷åíèå”: 
“Floors -> 1st” (“Ýòàæè -> 1-é”); 
“Floors -> 2nd” (“Ýòàæè -> 2-é”); 
“Rooms -> Engines” (“Êîìíàòû -> ìàøèííûé_çàë”). 
Ïðèìåð ARO “Ðàçäåë -> Çíà÷åíèå”: 
“People -> John_Smith” (“Ëþäè -> Äæîí_Ñìèò”); 
“People -> Cathy_Jones” (“Ëþäè -> Êýòè_Äæîíñ”); 
“Hosts -> sandbox.something.com” (“Õîñòû -> sandbox.something.com”). 
Ïðèìåð èñïîëüçîâàíèÿ API: 
acl_check(aro_section, aro_value, aco_section, aco_value); 
acl_check('People', 'John_Smith', 'Floor', '2nd'); 
Ïðèìåðû ïðàâèëüíîãî èìåíîâàíèÿ: 
“ACO - Frob > Flerg”, “ARO – Frob -> Flerg” (Ðàçäåë è Çíà÷åíèå ÿâëÿþòñÿ îäèíàêîâûìè, íî ýòî õîðîøî, ïîñêîëüêó namespaces ðàçíûå äëÿ ðàçíûõ òèïîâ îáúåêòîâ äîñòóïà); 
“ACO – Frob -> Flerg”, “ACO – Frob -> Queegle” (òèï îáúåêòà äîñòóïà è íàçâàíèå Ðàçäåëà îäèíàêîâûå, ýòî õîðîøî, ïîñêîëüêó ó íèõ ðàçíûå Çíà÷åíèÿ); 
“AXO – Frob Hrung -> Flerg” (Ðàçäåëû ìîãóò ñîäåðæàòü ïðîáåëû). 
Ïðèìåð íåïðàâèëüíîãî èìåíîâàíèÿ: 
“ACO – Frob -> Flerg”, “ACO – Frob -> Flerg” (òèï îáúåêòà äîñòóïà – Ðàçäåë -> Çíà÷åíèå äîëæíû áûòü óíèêàëüíûìè); 
“ACO – Frob -> Flerg Habit” (Çíà÷åíèå íå ìîæåò ñîäåðæàòü ïðîáåëîâ). 
Äîáàâëåíèå ðàçäåëîâ
Ïðåæäå ÷åì äîáàâèòü íîâûé îáúåêò äîñòóïà âû äîëæíû ñîçäàòü Ðàçäåë. Äëÿ äîáàâëåíèÿ íîâîãî ðàçäåëà èñïîëüçóéòå ôóíêöèþ add_object_section(). 
add_object_section(
    string NAME,        Êîðîòêîå îïèñàíèå òîãî, äëÿ ÷åãî ýòîò Ðàçäåë 
                        èñïîëüçóåòñÿ (ïðèìåð, 'Levels in building'
                        (“Ýòàæè â çäàíèè”)).
    string VALUE,       Íàçâàíèå Ðàçäåëà (ïðèìåð, 'Floors' (“Ýòàæè”)).
    int ORDER,          Öåííîñòü ðàçäåëà, âëèÿåò íà òî, êàêèì ïî ñ÷åòó â ñïèñêå
                        â èíòåðôåéñå ïîëüçîâàòåëÿ ïîÿâèòñÿ ýòîò Ðàçäåë.
    bool HIDDEN         Ïîêàçûâàåò, äîëæåí ëè ýòîò ðàçäåë áûòü âèäåí â
                        ïîëüçîâàòåëüñêîì èíòåðôåéñå.
    string GROUP_TYPE); Òèï îáúåêòà äîñòóïà (ACO, ARO, AXO).
Õàí ñîçäàë 3 ðàçäåëà äëÿ AROs “Ëþäè”, “×óæèå” è “Àíäðîèäû” Äàâàéòå ïîñìîòðèì, êàê áóäåò âûãëÿäåòü AROs ñ èõ ïîëíûìè íàçâàíèÿìè: 
Ïàññàæèðû Ñîêîëà òûñÿ÷åëåòèÿ
??Êîìàíäà                    [ALLOW: ALL]
? ??"Ëþäè > Õàí"
? ??"×óæèå > ×óâè"           [DENY: Engines]
? ??"Ëþäè > Ëàíäî"
??Ïàññàæèðû                  [ALLOW: Lounge]
? ??Äæåäàè                   [ALLOW: Cockpit]
? ? ??"Ëþäè > Îáè-Âàí"
? ? ??"Ëþäè > Ëþê"           [ALLOW: Guns] 
? ??"Àíäðîèäû > R2D2"
? ??"Àíäðîèäû > C3PO"
??Èíæåíåðû                   [ALLOW: Engines, Guns]
  ??"Ëþäè > Õàí"
  ??"Àíäðîèäû > R2D2"
  ??"×óæèå > Õàíòóê"
Ðàçäåëû – òîëüêî ñïîñîá êàòåãîðèçèðîâàòü îáúåêòû äîñòóïà, ñäåëàòü ïîëüçîâàòåëüñêèé èíòåðôåéñ áîëåå ïðèãîäíûì ê èñïîëüçîâàíèþ, à òàê æå ñäåëàòü ôóíêöèþ acl_check() áîëåå ÷èòàåìîé. Îíè íå çàòðàãèâàþò ïóòü phpGACL äëÿ îïðåäåëåíèÿ ïðàâ îáúåêòà äîñòóïà. Òàêæå, ðàçäåëû íå ìîãóò áûòü âëîæåííûìè, òî åñòü âû íå ìîæåòå ñîçäàòü “Ìóæ÷èí” âíóòðè “Ëþäåé”. Âû äîëæíû áóäåòå ñîçäàòü ðàçäåë “Ëþäè ìóæñêîãî ïîëà” èëè ïîäîáíûé. 
Ìíîæåñòâî öåëåé
Âîçìîæíî, âû áóäåòå èñïîëüçîâàòü phpGACL ñðàçó äëÿ íåñêîëüêèõ öåëåé, íàïðèìåð, îãðàíè÷èòü ïîëüçîâàòåëüñêèé äîñòóï ê ñòðàíèöàì, à òàê æå óäàëåííûé äîñòóï ê ñòðàíèöàì âàøåãî ñåðâåðà. Ýòè äâå çàäà÷è íå ñâÿçàíû. 
PhpGACL ïðåäëàãàåò ðåàëèçîâàòü ýòî òðåìÿ ðàçëè÷íûìè ïóòÿìè: 
âû ìîæåòå èñïîëüçîâàòü äîïîëíèòåëüíûå áàçû äàííûõ äëÿ õðàíåíèÿ ýòèõ äàííûõ; 
âû ìîæåòå èñïîëüçîâàòü òóæå ñàìóþ áàçó äàííûõ íî ñ äðóãèìè èìåíàìè òàáëèö (âñåæå, ýòà âîçìîæíîñòü ïîêà íå ïîääåðæèâàåòñÿ); 
âû ìîæåòå õðàíèòü îáúåêòû äîñòóïà â òåõ æå ñàìûõ òàáëèöàõ, è î÷åíü òùàòåëüíî óïðàâëÿòü èìè, òàê, ÷òîáû îíè íå âñòóïàëè â ïðîòèâîðå÷èÿ. 
×òîáû âûáðàòü ïåðâûé èëè âòîðîé ñïîñîá (êîãäà îí áóäåò äîñòóïåí) èñïîëüçóéòå ìàññèâ $gacl_options, êîãäà ñîçäàåòå íîâûé êëàññ phpGACL. Ýòî ïîçâîëèò âàì îïðåäåëèòü áàçó è ïðåôèêñ äëÿ òàáëèö: 
$gacl_options = array(
    'db_table_prefix' => 'gacl_',
    'db_type' => 'mysql',
    'db_host' => 'host1',
    'db_user' => 'user',
    'db_password' => 'passwd',
    'db_name' => 'gacl');

$gacl_host1 = new gacl($gacl_options);
Áóäüòå î÷åíü îñòîðîæíû, åñëè âû âûáåðèòå òðåòèé âàðèàíò, ïîñêîëüêó phpGACL íè÷åãî íå çíàåò îá îòíîøåíèÿõ ìåæäó âàøèìè çàäà÷àìè, à, ñëåäîâàòåëüíî, íå ñìîæåò êîíòðîëèðîâàòü ðàçëè÷íûå áåññìûñëåííûå äèðåêòèâû ïîëèòèêè äîñòóïà. 
Íàïðèìåð, Õàí ìîæåò ðåøèòü çàïðåòèòü äîñòóï êîðàáëÿì, êîòîðûå âñòóïàþò â êîíòàêò ñ åãî êîìïüþòåðîì, ê êàêèì-ëèáî êîìíàòàì íà êîðàáëå. Äëÿ ýòîãî îí ìîæåò ñîçäàòü “Êîðàáëü Ëþêà” êàê âíåøíèé êîðàáëü ARO â ýòîì æå ñàìîì ARO-äåðåâå.  ðåçóëüòàòå ÷åãî, ñòàíåò âîçìîæíûì ñîçäàòü APD (ïðàâèëî àâòîìàòè÷åñêîé îáðàáîòêè): “Êîðàáëè -> Êîðàáëü Ëþêà” è íàçíà÷èòü åìó ïðàâà “ALLOW (ðàçðåøèòü): “Êîìíàòû -> ïàññàæèðñêèé çàë”. Ñîãëàñèòåñü, ýòî ïîëíîñòüþ áåññìûñëåííî! ×òîáû ïîìî÷ü â ðàçðåøåíèè òàêèõ ïðîòèâîðå÷èé, äàâàéòå ïðàâèëüíîå (èíôîðìàòèâíîå) íàçâàíèå Ðàçäåëàì, ÷òîáû îíè ÷åòêî äàâàëè ïîíÿòü, ÷åì íà ñàìîì äåëå ÿâëÿåòñÿ îáúåêò äîñòóïà è äëÿ êàêèõ çàäà÷ èñïîëüçóþòñÿ. Ýòî äîëæíî áûòü î÷åâèäíî äëÿ ëþáîãî àäìèíèñòðàòîðà, ÷òî áåññìûñëåííî íàçíà÷àòü ðàçðåøåíèÿ êîðàáëÿì äëÿ äîñòóïà â êàêóþ-ëèáî êîìíàòó. 
Îáúåêòû ðàñøèðåíèÿ äîñòóïà (AXO)
Îáúåêòû ðàñøèðåíèÿ äîñòóïà ìîãóò äîáàâëÿòü òðåòüå èçìåðåíèå ê ðàçðåøåíèÿì, êîòîðûå ìîãóò ôîðìèðîâàòüñÿ â phpGACL. Ìû ñ âàìè âèäåëè, êàê phpGACL ïîçâîëÿåò êîìáèíèðîâàòü îáúåêòû ARO è ACO (2 èçìåðåíèÿ) äëÿ ñîçäàíèÿ ïîëèòèêè äîñòóïà. Ýòî î÷åíü õîðîøî äëÿ ïðîñòûõ ðàçðåøåíèé, íàïðèìåð: 
Ëþê (ARO) ïðîñèò ðàçðåøåíèå íà äîñòóï ê Îðóæèþ (ACO). 
Åñëè ýòî âñå, ÷åãî âû õîòèòå, ïðåêðàñíî – AXO ÿâëÿåòñÿ ïîëíîñòüþ äîïîëíèòåëüíûì (òî åñòü ìîæåò îòñóòñòâîâàòü). 
Íî, ïîñêîëüêó âñå ACOs ÿâëÿþòñÿ ðàâíûìè, ýòî ìåøàåò ñïðàâëÿòüñÿ ñ íèìè åñëè èõ î÷åíü ìíîãî. Åñëè ýòî òàê, òî ìû ìîæåì èçìåíèòü ñïîñîá, êîòîðûì ìû ñìîòðèì íà îáúåêòû äîñòóïà, äëÿ áîëåå ëåãêîãî óïðàâëåíèÿ èìè. 
AXOs èäåíòè÷íû AROs âî ìíîãèõ îòíîøåíèÿõ. Åñòü äåðåâî AXO (îòäåëüíîå îò äåðåâà ARO), ñî ñâîèìè ñîáñòâåííûìè Ãðóïïàìè è AXOs. Êîãäà âû áóäåòå èìåòü äåëî ñ AXO, äóìàéòå, ÷òî AXO áåðåò íà ñåáÿ ñòàðóþ ðîëü ACO (òî åñòü ÿâëÿåòñÿ “âåùàìè, ê êîòîðûì òðåáóåòñÿ äîñòóï”), è èçìåíÿþò ïðåäñòàâëåíèå ACOs ñ “âåùè, ê êîòîðûì òðåáóåòñÿ äîñòóï” íà “äåéñòâèå, êîòîðîå òðåáóåòñÿ ñîâåðøèòü”. 
Ïîñìîòðèì òîëüêî íà ARO è ACO: 
ARO – âåùè, ïðîñÿùèå äîñòóï; 
ACO – âåùè, ê êîòîðûì íóæåí äîñòóï. 
Ïîñìîòðèì íà ARO, ACO è AXO: 
ARO – âåùè, êîòîðûå ïðîñÿò äîñòóï; 
ACO – äåéñòâèÿ, êîòîðûå òðåáóåòñÿ ñîâåðøèòü 
AXO – âåùè, ê êîòîðûì íóæåí äîñòóï. 
Ïðèìåð: 
Ìåíåäæåð ñàéòà ïûòàåòñÿ óïðàâëÿòü äîñòóïîì ê ïðîåêòàì íà âåáñàéòå. Äåðåâî ARO ñîñòîèò èç âñåõ ïîëüçîâàòåëåé: 
Âåáñàéò
??Àäìèíèñòðàòîðû
? ??Ýëèñ
? ??Êýðîë
??Ïîëüçîâàòåëè
  ??Áîá
  ??Àëàí
Ïðîåêòû îðãàíèçîâàíû ïî ïðèíöèïó èñïîëüçóåìîé îïåðàöèîííîé ñèñòåìû â Ãðóïïàõ AXO: 
Ïðîåêòû
??Linux
? ??SpamFilter2
? ??AutoLinusWorshipper
??Windows
  ??PaperclipKiller
  ??PopupStopper
Äåéñòâèÿ, êîòîðû ìîãóò âûïîëíÿòüñÿ íàä êàæäûì îáúåêòîì - “Ïðîñìîòð” è “Ðåäàêòèðîâàíèå” - ýòî ACOs. 
È òàê, ìû õîòèì, ÷òîáû Áîá èìåë âîçìîæíîñòü ïðîñìîòðà âñåõ ïðîåêòîâ Linux. Ýòî âîçìîæíî ïðè ïîìîùè äîáàâëåíèÿ ADP (àâòîìàòè÷åñêîé îáðàáîòêè) ñâÿçêè ARO Áîáà ñ ACO “Ïðîñìîòð” è AXO Linux. Òåïåðü ìû ìîæåì çàäàòü âîïðîñ: 
“Áîᔠ(ARO) ïðîñèò äåéñòâèÿ “Ïðîñìîòð” (ACO) äëÿ ïðîåêòà “Linux” (AXO). 
Îáðàùàþ âàøå âíèìàíèå íà òî, ÷òî AXO ÿâëÿåòñÿ äîïîëíèòåëüíûì, åñëè âû íå îïðåäåëèòå AXO, âûçûâàÿ acl_check(), òî ADP (àâòîìàòè÷åñêàÿ îáðàáîòêà) îñóùåñòâèòñÿ áåç ó÷åòà AXO. Îäíàêî, åñëè APD (àâòîìàòè÷åñêàÿ îáðàáîòêà) ñóùåñòâóåò òîëüêî ñ AXO, à âû âûçîâèòå acl_check() áåç óêàçàíèÿ AXO, âû ïîòåðïèòå íåóäà÷ó. 
È òàê, åñëè âû ïðè âûçîâå acl_check() îïðåäåëÿåòå AXO, òî ýòà ôóíêöèÿ áóäåò èñêàòü â ACL òîëüêî ñîäåðæàíèå AXO. Åñëè íèêàêîé AXO íå îïðåäåëåí, òîëüêî áóäåò ðàññìîòðåíû òîëüêî ACL. Ýòî (â òåîðèè) äàåò íàì íåáîëüøîå óâåëè÷åíèå ñêîðîñòè ðàáîòû. 




Èíñòàëëÿöèÿ
Áàçîâàÿ íàñòðîéêà
1.Ðàñïàêóéòå àðõèâ äèñòðèáóòèâà â êîðåíü èëè íóæíóþ âàì ïàïêó ñàéòà. Âîçìîæíî, âû çàõîòèòå ïåðåèìåíîâàòü åå âî ÷òî-òî áîëåå ïîäõîäÿùåå. 

2.Ðåäàêòèðóéòå ôàéë phpgacl/gacl.class.php. Óñòàíîâèòå db_type, db_host, db_user, db_password è db_name, êîòîðûå âû ïðåäïîëàãàåòå èñïîëüçîâàòü. 

Òåïåðü íåîáõîäèìî îòðåäàêòèðîâàòü phpgacl/admin/gacl_admin.inc.php, âíåñÿ â íåãî òóæå ñàìóþ èíôîðìàöèþ. Ýòîò ôàéë íóæåí äëÿ àäìèíèñòðàòèâíîé ÷àñòè ñêðèïòà. 
Ïðè÷èíà, ïî÷åìó íåîáõîäèìî äâàæäû ââåñòè îäèíàêîâûå äàííûå, çàêëþ÷àåòñÿ â òîì, ÷òî êëàññ gacl.calss.php íàìíîãî ìåíüøå ïî îáúåìó, ÷åì âåñü ïðîãðàììíûé èíòåðôåéñ. È íåò íåîáõîäèìîñòè òÿíóòü çà ñîáîé âñå ñêðèïòû, åñëè âàì âñåãî ëèøü íåîáõîäèìî âûçâàòü ôóíêöèþ acl_check(). 
3.Ñîçäàéòå áàçó äàííûõ ñ èìåíåì, êîòîðîå âû çàäàëè â db_name. 
4.Çàïóñòèòå http://your_site.net/phpgacl/setup.php. Ýòîò ñêðèïò ñîçäàñò íåîáõîäèìûå òàáëèöû. Íå áîéòåñü ñëîæíîé èíôîðìàöèè, ñêðèïò ïîêàæåò âàì òîëüêî ñîîáùåíèÿ îá óñïåøíîé ðàáîòå. 

5.Ñëåäóÿ çàìå÷åíèþ íà êàðòèíêå (Ïåðåâîä çàìå÷àíèÿ íà êàðòèíêå: Ïîæàëóéñòà, ñîçäàéòå äèðåêòîðèþ /admin/templates_c è óñòàíîâèòå íà íåå ïðàâà äîñòóïà. Íàæìèòå “Go here!” äëÿ íà÷àëà ðàáîòû), ñîçäàéòå íåîáõîäèìóþ äèðåêòîðèþ. Ïðàâà äîñòóïà äîëæíû ïîçâîëÿòü çàïèñü â ýòó äèðåêòîðèþ. 
6.Íàæìèòå íà “Go here!” è âû ïåðåíåñåòåñü ñþäà: http://your_site.net/admin/acl_admin.php. 
Äîïîëíèòåëüíûå íàñòðîéêè
Åñëè âû óæå èñïîëüçóåòå ADOdb â ñâîèõ ñêðèïòàõ, òî âû ìîæåòå óêàçàòü phpGACL èñïîëüçîâàòü óæå èìåþùóþñÿ óñòàíîâêó: 
1.Îòðåäàêòèðóéòå phpgacl/gacl.class.php ïåðåìåííóþ ADODB_DIR, óêàçàâ â íåé ïóòü ê óñòàíîâëåííîé áèáëèîòåêå. 
2.Ïåðåèìåíóéòå äèðåêòîðèþ phpgacl/adodb â êàêóþ-íèáóäü äðóãóþ, íàïðèìåð adodb_x è ïåðåçàïóñòèòå phpgacl/admin/acl_admin.php äëÿ ïðîñìîòðà èçìåíåíèé. 
3.Óäàëèòå äèðåêòîðèþ adodb, óñòàíîâëåííóþ âìåñòå ñ phpGACL. 
Åñëè âû óæå èñïîëüçóåòå Smarty â ñâîèõ ñêðèïòàõ, òî âû ìîæåòå óêàçàòü phpGACL èñïîëüçîâàòü óæå èìåþùóþñÿ óñòàíîâêó: 
1.Îòðåäàêòèðóéòå ñêðèïò phpgacl/admin/gacl_admin.inc.php, óñòàíîâèâ íåì ñëåäóþùèå ïåðåìåííûå: $smarty_dir è $smarty_compile_dir, ÷òîáû îíè óêàçûâàëè íà êàòàëîã, ãäå ó âàñ óæå óñòàíîâëåí Smarty. Ïåðåìåñòèòå äèðåêòîðèþ ñ øàáëîíàìè phpGACL â äðóãóþ äèðåêòîðèþ (íàïðèìåð â òó, êîòîðóþ âû íà äàííûé ìîìåíò óæå èñïîëüçóåòå). 
2.Ïåðåèìåíóéòå ïàïêó phpgacl/smarty â äðóãóþ, íàïðèìåð smarty_x. È ïåðåçàïóñòèòå phpgacl/admin/acl_admin.php äëÿ ïðîñìîòðà èçìåíåíèé. 
3.Óäàëèòå ïàïêó smarty èíñòàëëÿöèè phpGACL. 
Êàê ìîæíî ïåðåìåñòèòü phpGACL ôàéëû èç ìîåãî äåðåâà âåáñàéòà ñ ñîõðàíåíèåì ñâÿçåé ñ äåðåâîì äëÿ àäìèíèñòðèðîâàíèÿ? 
1.Ïåðåéäèòå â êîðåíü âàøåãî âåáñàéòà. 
2.Ïåðåìåñòèòå äèðåêòîðèþ phpGACL â íåîáõîäèìóþ âàì äèðåêòîðèþ è ñîçäàéòå ñèìëèíê (ññûëêó) íà àäìèíèñòðàòèâíóþ äèðåêòîðèþ òàì, ãäå âû õîòèòå åãî çàïóñêàòü. 
mv phpgacl/ /www/includes_directory
ln -s /www/includes_directory/phpgacl/admin/ gacl
3.Òåïåðü ïîïðîáóéòå çàïóñòèòü phpgacl. Åñëè îí íå ñòàë ðàáîòàòü, òî, âîçìîæíî, âàø ñàéò íå ïîääåðæèâàåò ñèìëèíêè( ññûëêè). 







Èñïîëüçîâàíèå phpGACL â âàøåé ïðîãðàììå
Áàçîâîå èñïîëüçîâàíèå
Ýòîò ïðèìåð ïîêàçûâàåò îñíîâíîé ñïîñîá èñïîëüçîâàíèÿ phpGACL â âàøåé ïðîãðàììå. Îí òàê æå ïîêàçûâàåò èñïîëüçîâàíèå àáñòðàêòíîãî êëàññà äëÿ äîñòóïà ê áàçàì äàííûõ ADOdb. Ïðèìåð èëëþñòðèðóåò ïðîñòîé ñïîñîá ïðîâåðêè ëîãèíà è ïàðîëÿ. 
// Ïîäêëþ÷àåì áàçîâûé API
include('phpgacl/gacl.class.php');
$gacl = new gacl();
$username = $db->quote($_POST['username']);
$password = $db->quote(md5($_POST['password']));
$sql = 'SELECT name FROM users WHERE name=';
$sql .= $username.' AND password='.$password;
$row = $db->GetRow($sql);
if($gacl->acl_check('system','login','user',$row['name'])){
  $_SESSION['username'] = $row['name'];
  return true;
}
else
  return false;
Âû âèäåòå òîëüêî îäèí âûçîâ acl_check(), ÷òî æå îí îçíà÷àåò? 
Ïðîâåðÿåò ARO-îáúåêò $row['name'] â ARO-ðàçäåëå 'user'. 
À òàêæå ACO-îáúåêò 'login' â ACO-ðàçäåëå 'system'. 









Ïðîôåññèîíàëüíîå èñïîëüçîâàíèå
Èñïîëüçîâàíèå àäìèíèñòðàòèâíîãî èíòåðôåéñà
Îòñóòñòâóåò â îðèãèíàëüíîé äîêóìåíòàöèè 




Îïèñàíèå API
ACL
add_acl() 
Äîáàâëÿåò ïðàâà äîñòóïà â ëèñò êîíòðîëÿ. 
add_acl(
    array ACO Ids,
    array ARO_IDs,
    array ARO_GROUP_IDs,
    array AXO_IDs,
    array AXO_GROUP_IDs,
    bool ALLOW,
    bool ENABLED
    [, int ACL_ID])
Âîçâðàùàåò: 
int ACL_ID, åñëè âñå ïðîøëî õîðîøî è FALSE, â ñëó÷àå íåóäà÷è. 


edit_acl() 
Ðåäàêòèðóåò ïðàâà äîñòóïà, êîòîðûå óæå óñòàíîâëåíû â ëèñòå êîíòðîëÿ. 
edit_acl (
    array ACO IDs,
    array ARO_IDs,
    array ARO_GROUP_IDs,
    array AXO_IDs,
    array AXO_GROUP_IDs,
    bool ALLOW,
    bool ENABLED
    [, int ACL_ID] )
Âîçâðàùàåò: 
int ACL_ID åñëè âñå ïðîøëî õîðîøî è FALSE, â ñëó÷àå íåóäà÷è. 

del_acl() 
Óäàëÿåò ïðàâà äîñòóïà, êîòîðûå óæå çàäàíû â ëèñòå êîíòðîëÿ. 
del_acl (
    int ACL ID)
Âîçâðàùàåò: 
TRUE åñëè âñå ïðîøëî óñïåøíî, FALSE, â ñëó÷àå íåóäà÷è. 
Groups (Ãðóïïû)
get_group_id() 
Âîçâðàùàåò ID ãðóïïû. 
get_group_id (
    string GROUP NAME)  Òèï îáúåêòà äîñòóïà (ARO, ACO, AXO)
Âîçâðàùàåò: 
int GROUP_ID â ñëó÷àå óñïåõà, FALSE, åñëè íåóäà÷à. 

get_group_parent_id() 
Âîçâðàùàåò ID íåïîñðåäñòâåííîãî ðîäèòåëÿ ãðóïïû. 
get_group_parent_id (
    int GROUP_ID)
Âîçâðàùàåò: 
int GROUP_PARENT_ID åñëè óäà÷à, FALSE – åñëè íåóäà÷à. 

add_group() 
Äîáàâëÿåò ãðóïïó â äåðåâî ãðóïï. 
add_group (
    string NAME
    [, int GROUP_PARENT_ID]
    [, string OBJECT_TYPE])
Âîçâðàùàåò: 
int GROUP_ID åñëè óäà÷à, FALSE åñëè íåóäà÷à. 

get_group_objects() 
Âîçâðàùàåò âïèñîê âñåõ îáúåêòîâ îòíåñåííûõ ê ãðóïïå. 
get_group_aro (
    int GROUP_ID,
    string GROUP_TYPE)
Âîçâðàùàåò: 
array SECTION_VALUE, VALUE åñëè óäà÷à, FALSE åñëè íåóäà÷à. 

add_group_object() 
Ñîîòíîñèò ARO ñ ãðóïïîé. 
add_group_aro (
    int GROUP_ID,
    string OBJECT_SECTION_VALUE,
    string OBJECT_VALUE,
    string GROUP_TYPE)  Òèï îáúåêòà äîñòóïà (ARO, AXO, ACO)
Âîçâðàùàåò: 
int TRUE åñëè óäà÷à, FALSE åñëè íåóäà÷à. 

del_group_object() 
Óäàëÿåò ARO èç ãðóïïû. 
del_group_aro (
    int GROUP_ID,
    string OBJECT_SECTION_VALUE,
    string OBJECT_VALUE,
    string GROUP_TYPE)  Òèï îáúåêòà äîñòóïà (ARO, AXO, ACO)
Âîçâðàùàåò: 
int TRUE åñëè óäà÷à, FALSE åñëè íåóäà÷à. 

edit_group() 
Ðåäàêòèðóåò ãðóïïû 
edit_group (
    int GROUP_ID,
    string NAME,
    int GROUP_PARENT_ID,
    string GROUP_TYPE)  Òèï îáúåêòà äîñòóïà (ARO, AXO, ACO)
Âîçâðàùàåò: 
int TRUE åñëè óäà÷à, FALSE åñëè íåóäà÷à. 

del_group() 
Óäàëÿåò ãðóïïó, ïåðåðàñïðåäåëÿåò äåòåé (åñëè åñòü) èëè óäàëÿåò èõ. 
del_group (
    int GROUP_ID,
    bool REPARENT_CHILDREN,
    string GROUP_TYPE)  Òèï îáúåêòà äîñòóïà (ARO, AXO, ACO)
Âîçâðàùàåò: 
int TRUE åñëè óäà÷à, FALSE åñëè íåóäà÷à. 
Access Objects (ARO/ACO/AXO) (Îáúåêòû äîñòóïà)
Ýòîò ðàçäåë API óïðàâëÿåò îáúåêòàìè äîñòóïà, òàêèìè êàê ACO, ARO, AXO. 

get_object() 
Âîçâðàùàåò ìàññèâ èíôîðìàöèè îáî âñåõ îáúåêòàõ óêàçàííîãî òèïà. 
get_object (
    [string SECTION_VALUE], Íåîáÿçàòåëüíûé, íàçâàíèå Ðàçäåëà (êàê ôèëüòð)
    bool RETURN_HIDDEN,     Âîçâðàùàòü ëè îáúåêòû ñ òèïîì “ñêðûòûé”
    string GROUP_TYPE)      Òèï îáúåêòà äîñòóïà (ARO, AXO, ACO)
Âîçâðàùàåò: 
array OBJECT_ID åñëè óäà÷à, FALSE åñëè íåóäà÷à. 

get_object_data() 
Âîçâðàùàåò ìàññèâ èíôîðìàöèè îá îáúåêòå äîñòóïà ñ êîíêðåòíûì ID. 
get_object_data (
    int OBJECT_ID,
    string GROUP_TYPE)  Òèï îáúåêòà äîñòóïà (ARO, AXO, ACO)
Âîçâðàùàåò: 
array (section_value, value, order_value, name) åñëè óäà÷à, FALSE åñäè íåóäà÷à. 

get_object_id() 
Âîçâðàùàåò ID îáúåêòà. 
get_object_id (
    string OBJECT_SECTION_VALUE,
    string OBJECT_VALUE,
    string GROUP_TYPE) Òèï îáúåêòà äîñòóïà (ARO, AXO, ACO)
Âîçâðàùàåò: 
int OBJECT_ID åñäè óäà÷à, FALSE åñëè íåóäà÷à. 

get_object_section_value() Âîçâðàùàåò ID ðàçäåëà ê êîòîðîìó ïðèïèñàí îáúåêò. 
get_object_section_value (
    int OBJECT_ID,
    string GROUP_TYPE)  Òèï îáúåêòà äîñòóïà (ARO, AXO, ACO)
Âîçâðàùàåò: 
int SECTION_VALUE åñëè óäà÷à, FALSE åñëè íåóäà÷à. 

add_object() 
Äîáàâëÿåò îáúåêò. 
add_object (
    string SECTION_VALUE,
    string NAME,
    string VALUE,
    int ORDER,
    bool HIDDEN,
    string GROUP_TYPE)  Òèï îáúåêòà äîñòóïà (ARO, AXO, ACO)
Âîçâðàùàåò: 
array OBJECT_ID åñëè óäà÷à, FALSE åñëè íåóäà÷à. 

edit_object() 
Ðåäàêòèðîâàíèå îáúåêòà. 
edit_object (
    string SECTION_VALUE,
    string NAME,
    string VALUE,
    int ORDER,
    bool HIDDEN,
    string GROUP_TYPE)  Òèï îáúåêòà äîñòóïà (ARO, AXO, ACO)
Âîçâðàùàåò: 
array OBJECT_ID åñëè óäà÷à, FALSE åñëè íåóäà÷à. 

del_object() 
Óäàëÿåò îáúåêò. 
del_object (
    int OBJECT_ID,
    string GROUP_TYPE,  Òèï îáúåêòà äîñòóïà (ARO, AXO, ACO)
    bool ERASE)
Âîçâðàùàåò: 
int TRUE åñëè óäà÷à, FALSE åñëè íåóäà÷à. 
Access Object Sections (Ðàçäåëû îáúåêòîâ äîñòóïà)
Ýòîò ðàçäåë API ïîçâîëÿåò óïðàâëÿòü Ðàçäåëàìè, êîòîðûå ÿâëÿþòñÿ ÷àñòüþ óíèêàëüíîãî íàçâàíèÿ îáúåêòà äîñòóïà (ñì. “Ðàçäåëû” äëÿ äîïîëíèòåëüíîé èíôîðìàöèè). 

get_object_section_section_id() 
Âîçâðàùàåò ID ñóùåñòâóþùåãî Ðàçäåëà. Âû äîëæíû óêàçàòü íàçâàíèå Ðàçäåëà èëè åãî çíà÷åíèå, èëè îáà ïàðàìåòðà. 
Åñëè âû îïðåäåëèòå òîëüêî íàçâàíèå, òî âîçìîæíû íåîäíîçíà÷íûå ðåçóëüòàòû (òàê êàê íàçâàíèå íå îáÿçàíî áûòü óíèêàëüíûì).  ýòîì ñëó÷àå âû ïîëó÷èòå ñîîáùåíèå îá îøèáêå. 
get_object_section_section_id (
    string NAME,        Êîðîòêîå îïèñàíèå òîãî, äëÿ ÷åãî ïðåäíàçíà÷èí Ðàçäåë 
                        (íàïðèìåð, Ýòàæè â çäàíèè”)
    string VALUE,       Íàçâàíèå Ðàçäåëà (íàïðèìåð, “Ýòàæ”)
    string GROUP_TYPE)  Òèï îáúåêòà äîñòóïà (ARO, AXO, ACO)
Âîçâðàùàåò: 
int SECTION_ID åñëè óäà÷à, FALSE åñëè íåóäà÷à. 

add_object_section() 
Äîáàâëÿåò íîâûé Ðàçäåë îáúåêòîâ. 
add_object_section(
    string NAME,        Êîðîòêîå îïèñàíèå òîãî, äëÿ ÷åãî ïðåäíàçíà÷èí Ðàçäåë 
                        (íàïðèìåð, Ýòàæè â çäàíèè”)
    string VALUE,       Íàçâàíèå Ðàçäåëà (íàïðèìåð, “Ýòàæ”)
    int ORDER,          Öåííîñòü Ðàçäåëà. Ó÷èòûâàåòñÿ â ïîëüçîâàòåëüñêîì èíòåðôåéñå ïðè âûâîäå ñïèñêà âûáîðà.
    bool HIDDEN,        TRUE – Ðàçäåë áóäåò ñêðûò èç ñïèñêà â ïîëüçîâàòåëüñêîì èíòåðôåéñå.
    string GROUP_TYPE)  Òèï îáúåêòà äîñòóïà (ARO, AXO, ACO)
Âîçâðàùàåò: 
int SECTION_ID åñëè óäà÷íî, FALSE åñëè íåóäà÷íî. 

edit_object_section() 
Èçìåíÿåò àòðèáóòû Ðàçäåëà. Ôóíêöèÿ íå ìîæåò èçìåíèòü òèï îáúåêòà äîñòóïà (äëÿ äîïîëíèòåëüíîé èíôîðìàöèè ñìîòðèòå add_object_section). 
edit_object_section (
    int OBJECT_SECTION_ID,  ID ðàçäåëà (âû ìîæåòå ïîëó÷èòü åãî ïðè ïîìîùè
                            ôóíêöèè get_object_section_section_id).
    string NAME,            Íîâîå íàçâàíèå Ðàçäåëà.
    string VALUE,           Íîâîå çíà÷åíèå Ðàçäåëà.
    int ORDER,              Íîâàÿ öåííîñòü ðàçäåëà.
    bool HIDDEN,            Íîâûé ñòàòóñ ðàçäåëà (ñêðûò èëè íåò)
    string GROUP_TYPE)      Òèï îáúåêòà äîñòóïà (ARO, AXO, ACO)
Âîçâðàùàåò: 
TRUE åñëè óäà÷à, FALSE åñëè íåóäà÷à. 

del_object_section() 
Óäàëÿåò Ðàçäåë. Âñå îáúåêòû Ðàçäåëà òàêæå áóäóò óäàëåíû!!! 
del_object_section (
    int SECTION_ID,     ID Ðàçäåëà
    string GROUP_TYPE,  Òèï îáúåêòà äîñòóïà (ARO, AXO, ACO)
    bool ERASE) Åñëè TRUE - âñå îáúåêòû Ðàçäåëà áóäóò óäàëåíû.
                Åñëè FALSE, òî âû ïîëó÷èòå ñîîáùåíèå îá îøèáêå â ñëó÷àå,
                åñëè Ðàçäåë ñîäåðæèò îáúåêòû, Ðàçäåë óäàëåí íå áóäåò,
                åñëè Ðàçäåë íå ñîäåðæèò îáúåêòîâ, îí áóäåò óäàëåí.
Âîçâðàùàåò: 
TRUE åñëè óäà÷à, FALSE åñëè íåóäà÷à. 

Return current item: PhpGACL