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 åñëè íåóäà÷à.