Á¦2Àå Zend_Acl

¸ñÂ÷

2.1. µµÀÔ
2.1.1. ÀÚ¿ø¿¡ ´ëÇØ
2.1.2. ·Ñ¿¡ ´ëÇØ
2.1.3. ¾×¼¼½º Á¦¾î ¸®½ºÆ® (ACL) ÀÇ ÀÛ¼º
2.1.4. ·ÑÀÇ µî·Ï
2.1.5. ¾×¼¼½º Á¦¾îÀÇ Á¤ÀÇ
2.1.6. ACL ¿¡ÀÇ ¹®ÀÇ
2.2. ¾×¼¼½º Á¦¾îÀÇ ¼¼·Ã
2.2.1. ÀûÈ®ÇÑ ¾×¼¼½º Á¦¾î
2.2.2. ¾×¼¼½º Á¦¾îÀÇ »èÁ¦
2.3. °íµµÀÇ »ç¿ë¹ý
2.3.1. ACL µ¥ÀÌÅÍÀÇ º¸Á¸¿¡ ÀÇÇÑ ¿µ¼Ó¼ºÀÇ È®º¸
2.3.2. assertion¸¦ »ç¿ëÇÑ Á¶°ÇºÎ ACL ±ÔÄ¢ÀÇ ÀÛ¼º

2.1. µµÀÔ

Zend_Acl (Àº)´Â, °æ·®À¸·Î À¯¿¬ÇÑ ¾×¼¼½º Á¦¾î ¸®½ºÆ® (ACL) ±â´É°ú ±ÇÇÑ °ü¸® ±â´ÉÀ» Á¦°øÇÕ´Ï´Ù.¾îÇø®ÄÉÀ̼ǿ¡¼­´Â ÀϹÝÀûÀ¸·Î, º¸È£µÈ ¿ÀºêÁ§Æ®¿¡ÀÇ ¾×¼¼½º¸¦ Á¦¾îÇϱâ À§Çؼ­ ÀÌ·¯ÇÑ ±â´ÉÀ» »ç¿ëÇÕ´Ï´Ù.

ÀÌ ¹®¼­¿¡ ´ëÇϰí,

  • ÀÚ¿ø (Resource) (ÀÌ)¶õ, ¾×¼¼½º Á¦¾îÀÇ ´ë»óÀÌ µÇ´Â ¿ÀºêÁ§Æ®ÀÔ´Ï´Ù.

  • ·Ñ (Role) (ÀÌ)¶õ, ÀÚ¿ø¿¡ ´ëÇØ¼­ÀÇ ¾×¼¼½º¸¦ ¿ä±¸ÇÏ´Â ¿ÀºêÁ§Æ®ÀÔ´Ï´Ù.

°£´ÜÇÏ°Ô ¸»Çϸé,·ÑÀÌ ÀÚ¿ø¿¡ ´ëÇØ¼­ÀÇ ¾×¼¼½º¸¦ ¿ä±¸ÇÑ´Ù ±×·¸´Ù°í ÇÏ´Â °ÍÀÔ´Ï´Ù.¿¹¸¦ µé¾î, ¾î´À »ç¶÷ÀÌ ÀÚµ¿Â÷¸¦ ÀÌ¿ëÇÏ°í ½Í´Ù°í »ý°¢Çϰí ÀÖ´Ù°í ÇսôÙ. ÀÌ °æ¿ì, ÀÚµ¿Â÷¸¦ ´©°¡ ÀÌ¿ëÇÒ ¼ö ÀÖ´ÂÁö°¡ °ü¸®µÇ°í ÀÖ´Ù°í ÇÏ¸é ¡¸ÀÖ´Â »ç¶÷¡¹ÀÌ ·Ñ·Î ¡¸ÀÚµ¿Â÷¡¹°¡ ÀÚ¿øÀÌ µË´Ï´Ù.

¾×¼¼½º Á¦¾î ¸®½ºÆ® (ACL) (À¸)·ÎÀÇ ¼³Á¤¿¡ ÀÇÇØ¼­, ¾îÇø®ÄÉÀ̼ÇÀº ¿ä±¸ÇØ ¿Â ¿ÀºêÁ§Æ® (·Ñ) ÇÏÁö¸¸ Á¦ÇÑµÈ ¿ÀºêÁ§Æ® (ÀÚ¿ø) ¿¡ÀÇ ¾×¼¼½º¸¦ ÀÎÁ¤¹Þ°í ÀÖ´ÂÁö ¾î¶²Áö¸¦ Á¦¾îÇÕ´Ï´Ù.

2.1.1. ÀÚ¿ø¿¡ ´ëÇØ

Zend_Acl ±×·³, ÀÚ¿øÀ» ÀÛ¼ºÇÏ´Â °ÍÀº °£´ÜÇÕ´Ï´Ù.Zend_Acl ÀÇ Zend_Acl_Resource_Interface ¿¡, °³¹ßÀÚ°¡ ÀÚ¿øÀ» ÀÛ¼ºÇÏ´Â °Í µ½´Â ±â´ÉÀÌ Æ÷ÇԵǾî ÀÖ½À´Ï´Ù. ÀÚ¿ø Ŭ·¡½º´Â, ´ÜÁö ÀÌ ÀÎÅÍÆäÀ̽º¸¦ ½ÇÀåÇÏ´Â °Í¸¸À¸·Î ÀÛ¼ºÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ ÀÎÅÍÆäÀ̽º¿¡ Æ÷ÇԵǴ ¸Þ¼Òµå´Â Çϳª¸¸À¸·Î, ±×°ÍÀº getResourceId() ÀÔ´Ï´Ù.ÀÌ ¸Þ¼Òµå¿¡ ÀÇÇØ, Zend_Acl (Àº)´Â ±× ¿ÀºêÁ§Æ®°¡ ÀÚ¿øÀÌ´Ù°í ÆÇ´ÜÇÕ´Ï´Ù.°Ô´Ù°¡ ±âº»ÀûÀÎ ÀÚ¿øÀÇ ½ÇÀåÀ» Æ÷ÇÔÇÑ´Ù Zend_Acl_Resource ÇÏÁö¸¸ Zend_Acl ¿¡ ÀÎŬ·çµå µÇ°í ÀÖ½À´Ï´Ù. °³¹ßÀÚ´Â, ÇÊ¿äÇÑ ºÎºÐ¸¸Å­À» È®ÀåÇÏ´Â °ÍÀ¸·Î ÀÚ¿øÀ» ÀÛ¼ºÇÒ ¼ö ÀÖ½À´Ï´Ù.

Zend_Acl (Àº)´Â, Æ®¸® ±¸Á¶¸¦ Á¦°øÇϰí ÀÖ½À´Ï´Ù.À̰ÍÀ» ÀÌ¿ëÇØ º¹¼öÀÇ ÀÚ¿ø ("¾×¼¼½º Á¦¾îµÇ°í ÀÖ´Â ¿¡¸®¾î") (À»)¸¦ Ãß°¡ÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÚ¿øÀº ÀÌ¿Í °°ÀÌ Æ®¸® ±¸Á¶·Î °ü¸®µÇ¹Ç·Î, Àü¹ÝÀûÀÎ °Í (·çÆ®¿¡ °¡±î¿î Æí) (À¸)·ÎºÎÅÍ Æ¯¼öÇÑ °Í (¸»´Ü¿¡ °¡±î¿î Æí) ±îÁö¸¦ Ãë±ÞÇÒ ¼ö ÀÖ½À´Ï´Ù. ƯÁ¤ÀÇ ÀÚ¿ø¿¡ ´ëÇØ¼­ ¹®ÀǸ¦ ½Ç½ÃÇϸé, ÀÚ¿øÀÇ °èÃþÀ» ´õµë¾î ÀÚµ¿ÀûÀ¸·Î »óÀ§ °èÃþ¿¡ÀÇ ¹®Àǵµ ÇàÇØÁý´Ï´Ù. À̰Ϳ¡ ÀÇÇØ, ±ÔÄ¢À» °èÃþÈ­ÇØ °ü¸®ÇÏ´Â °Í ½ÇÇöµÉ ¼ö ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¾î, ¾î´À µµ½ÃÀÇ ¸ðµç °Ç¹°¿¡ Àû¿ëµÇ´Â µðÆúÆ®ÀÇ ±ÔÄ¢ÀÌ ÀÖ´Â °æ¿ì¿¡, ±×°ÍÀ» °¢ °Ç¹°¿¡ Àû¿ëÇÏ´Â ´ë½Å¿¡ µµ½Ã¿¡ ´ëÇØ¼­ Àû¿ëÇÒ ¼ö ÀÖ°Ô µË´Ï´Ù. ¾È¿¡´Â ÀÌ ±ÔÄ¢ÀÇ ¿¹¿Ü°¡ µÇ´Â °Ç¹°µµ ÀÖÀ»Áöµµ ¸ð¸¨´Ï´Ù. Zend_Acl ±×·³, ÀÌ·¯ÇÑ »óȲµµ °£´ÜÇÏ°Ô Ã³¸®ÇÒ ¼ö ÀÖ½À´Ï´Ù. ¿¹¿ÜÀûÀÎ ±ÔÄ¢À» Àû¿ëÇÏ´Â °Ç¹°¿¡ ´ëÇØ¼­´Â, °Ç¹°¿¡ ´ëÇØ¼­ Á÷Á¢ ±ÔÄ¢À» Á¤ÀÇÇϸé ÁÁ½À´Ï´Ù. ÀÚ¿øÀº, ´ÜÀÏÀÇ ÀÚ¿ø ¹Û¿¡ °è½ÂÇÒ ¼ö ¾ø½À´Ï´Ù. ±×¸®°í ±× °è½Â¿øÀÇ ÀÚ¿øÀÌ ¶Ç ´Ù¸¥ Ä£ÀÚ¿øÀ» °è½ÂÇØ¡¦¡¦ (¿Í)°ú °°Àº Á¤µµ°¡ µË´Ï´Ù.

Zend_Acl (Àº)´Â, ÀÚ¿ø¿¡ ´ëÇÑ ±ÇÇÑ ("create","read","update","delete" µî) µµ ¼­Æ÷Æ®Çϰí ÀÖ¾î, ¸ðµç ±ÇÇÑ È¤Àº ÀϺÎÀÇ ±ÇÇÑÀ¸·Î ¿µÇâÀ» ¹ÌÄ¡´Â ±ÔÄ¢À», ÀÚ¿ø¿¡ ´ëÇØ¼­ ÇÒ´çÇÒ ¼ö ÀÖ½À´Ï´Ù.

2.1.2. ·Ñ¿¡ ´ëÇØ

ÀÚ¿ø°ú °°ÀÌ, ·ÑÀ» ÀÛ¼ºÇÏ´Â °Íµµ °£´ÜÇÕ´Ï´Ù.Zend_Acl ÀÇ Zend_Acl_Role_Interface ¿¡, °³¹ßÀÚ°¡ ·ÑÀ» ÀÛ¼ºÇÏ´Â °Í µ½´Â ±â´ÉÀÌ Æ÷ÇԵǾî ÀÖ½À´Ï´Ù. ·Ñ Ŭ·¡½º´Â, ´ÜÁö ÀÌ ÀÎÅÍÆäÀ̽º¸¦ ½ÇÀåÇÏ´Â °Í¸¸À¸·Î ÀÛ¼ºÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ ÀÎÅÍÆäÀ̽º¿¡ Æ÷ÇԵǴ ¸Þ¼Òµå´Â Çϳª¸¸À¸·Î, ±×°ÍÀº getRoleId() ÀÔ´Ï´Ù.ÀÌ ¸Þ¼Òµå¿¡ ÀÇÇØ, Zend_Acl (Àº)´Â ±× ¿ÀºêÁ§Æ®°¡ ·ÑÀÌ´Ù°í ÆÇ´ÜÇÕ´Ï´Ù.°Ô´Ù°¡ ±âº»ÀûÀÎ ·ÑÀÇ ½ÇÀåÀ» Æ÷ÇÔÇÑ´Ù Zend_Acl_Role ÇÏÁö¸¸ Zend_Acl ¿¡ ÀÎŬ·çµå µÇ°í ÀÖ½À´Ï´Ù. °³¹ßÀÚ´Â, ÇÊ¿äÇÑ ºÎºÐ¸¸Å­À» È®ÀåÇÏ´Â °ÍÀ¸·Î ÀÚ¿øÀ» ÀÛ¼ºÇÒ ¼ö ÀÖ½À´Ï´Ù.

Zend_Acl ±×·³, ¾î´À ·ÑÀº ´Ù¸¥ º¹¼öÀÇ ·ÑÀ» °è½ÂÇÒ ¼ö ÀÖ½À´Ï´Ù. À̰ÍÀº, °¢°¢ÀÇ ·ÑÀÇ ±ÔÄ¢À» °è½ÂÇÏ´Â °ÍÀ» ¼­Æ÷Æ®Çϱâ À§ÇÑÀÇ °ÍÀÔ´Ï´Ù. ¿¹¸¦ µé¾î,"sally" (¿Í)°ú °°Àº À¯Àú ·ÑÀº,"editor" ÇÑÆí "administrator" (¿Í)°ú °°ÀÌ º¹¼öÀÇ Ä£·Ñ¿¡ ¼ÓÇÏ´Â Àϵµ ÀÖÀ» ¼ö ÀÖ°ÚÁö¿ä. ÀÌ °æ¿ì, °³¹ßÀÚ´Â "editor" ¹× "administrator" ¿¡ °¢°¢ º°·Î ±ÔÄ¢À» Á¤ÀÇÇÕ´Ï´Ù. ±×¸®°í "sally" ÇÏÁö¸¸ ±× ¾çÂÊ ¸ðµÎ¸¦ °è½ÂÇϱâ·Î ÇϰڽÀ´Ï´Ù. "sally" ¿¡ ±ÔÄ¢À» Á÷Á¢ Á¤ÀÇÇÒ ÇÊ¿ä´Â ¾ø½À´Ï´Ù.

º¹¼öÀÇ ·Ñ·ÎºÎÅÍÀÇ °è½ÂÀº ¸Å¿ì Æí¸®ÇÕ´Ï´Ù¸¸, ´ÙÁß »ó¼ÓÀº º¹ÀâÇÑ ¹®Á¦¸¦ ÀÏÀ¸Å°±âµµ ÇÕ´Ï´Ù. ´ÙÀ½ÀÇ ¿¹´Â, ¾Ö¸ÅÇÑ Á¶°ÇÀÌ µÇ¾úÀ» ¶§¿¡ Zend_Acl ÇÏÁö¸¸ ±×°ÍÀ» ¾î¶»°Ô ÇØ°áÇÏ´ÂÁö¸¦ ³ªÅ¸³»´Â °ÍÀÔ´Ï´Ù.

·Ê 2.1. ·ÑÀÇ ´ÙÁß »ó¼Ó

ÀÌÇÏÀÇ Äڵ忡¼­´Â, ±âº»ÀÌ µÇ´Â ¼¼ °³ÀÇ ·Ñ "guest","member" ¹× "admin" (À»)¸¦ Á¤ÀÇÇϰí ÀÖ½À´Ï´Ù.´Ù¸¥ ·ÑÀº À̰͵éÀ» °è½ÂÇÏ°Ô µË´Ï´Ù. ´ÙÀ½¿¡,"someUser" ±×·¸´Ù°í ÇÏ´Â ·ÑÀ» ÀÛ¼ºÇØ ÀÌ·¯ÇÑ ¼¼ °³ÀÇ ·ÑÀ» °è½ÂÇÕ´Ï´Ù. ÀÌ·¯ÇÑ ·ÑÀÌ ¹è¿­ $parents ¿¡ ³ªÅ¸³ª´Â ¼ø¼­°¡ Áß¿äÇØÁý´Ï´Ù. ¹®ÀÇóÀÇ ·Ñ (¿©±â¿¡¼­´Â "someUser" ¿¡ ¾×¼¼½º ±ÔÄ¢ÀÌ Á¤ÀǵǾî ÀÖÁö ¾ÊÁö¸¸ ±× °è½Â¿ø (¿©±â¿¡¼­´Â "guest","member" ¹× "admin") ¿¡´Â Á¤Àǵǰí ÀÖ´Ù°í ÇÏ´Â °æ¿ì,Zend_Acl (Àº)´Â ±× ÂÊÀ» °Ë»öÇÕ´Ï´Ù.


<?php
require_once 'Zend/Acl.php';
$acl = new Zend_Acl();

require_once 
'Zend/Acl/Role.php';
$acl->addRole(new Zend_Acl_Role('guest'))
    ->
addRole(new Zend_Acl_Role('member'))
    ->
addRole(new Zend_Acl_Role('admin'));

$parents = array('guest''member''admin');
$acl->addRole(new Zend_Acl_Role('someUser'), $parents);

require_once 
'Zend/Acl/Resource.php';
$acl->add(new Zend_Acl_Resource('someResource'));

$acl->deny('guest''someResource');
$acl->allow('member''someResource');

echo 
$acl->isAllowed('someUser''someResource') ? 'allowed' 'denied';

"someUser" ·Ñ ¹× "someResource" ¿¡ ´ëÇÑ ±ÔÄ¢Àº Á¤ÀǵǾî ÀÖÁö ¾Ê±â ¶§¹®¿¡, Zend_Acl (Àº)´Â, ±× ±ÔÄ¢ÀÌ "someUser" ÀÇ °è½Â¿ø·Ñ·Î Á¤Àǵǰí ÀÖ´Â °ÍÀ¸·Î¼­ °Ë»öÇÕ´Ï´Ù. ¿ì¼± "admin" ·ÑÀ» ã½À´Ï´Ù¸¸, ¿©±â¿¡¼­´Â ¾×¼¼½º ±ÔÄ¢ÀÌ Á¤Àǵǰí ÀÖÁö ¾Ê½À´Ï´Ù. ´ÙÀ½¿¡ "member" ·ÑÀ» ã¾Æ, ¿©±â¼­ Zend_Acl ÇÏÁö¸¸ ±ÔÄ¢À» ¹ß°ßÇÕ´Ï´Ù.Áï "member" ÇÏ "someResource" ¿¡ÀÇ ¾×¼¼½º°¡ Çã°¡µÇ°í ÀÖ´Â °ÍÀÔ´Ï´Ù.

±×·¯³ª, ¸¸ÀÏ Zend_Acl ÇÏÁö¸¸ ÇÑÃþ ´õ ´Ù¸¥ ºÎ¸ð¿¡ ´ëÇØ¼­µµ ±ÔÄ¢ÀÇ °Ë»öÀ» °è¼ÓÇß´Ù°í Çϸé, "guest" ÇÏ "someResource" ¿¡ÀÇ ¾×¼¼½º°¡ °ÅºÎµÇ°í ÀÖ´Â °Í¿¡ ´«Ä¡Ã¤°ÚÁö¿ä. À̰ÍÀº ¹®Á¦°¡ µË´Ï´Ù.±×·¸´Ù°í ÇÏ´Â °Íµµ,"someUser" ÇÏ "someResource" ¿¡ÀÇ ¾×¼¼½º°¡ Çã°¡µÇ°í ÀÖ´Â °Í°ú µ¿½Ã¿¡ °ÅºÎµÇ°í ÀÖ´Â °ÍÀ¸·Î, °¢°¢ ´Ù¸¥ Ä£·Ñ·ÎºÎÅÍ ÃëµæÇÑ ±ÔÄ¢ÀÌ Ãæµ¹ÇÏ°Ô µÇ±â ¶§¹®ÀÔ´Ï´Ù.

Zend_Acl ±×·³, ÀÌ·¯ÇÑ Ãæµ¹ÀÇ °¡´É¼ºÀ» ÇØ°áÇϱâ À§Çؼ­, ¹Ù·Î ¿·¿¡ °è½ÂµÈ ·ÑÀÇ ¿ì¼±µµ°¡ ³ô¾ÆÁöµµ·Ï(µíÀÌ) Çϰí ÀÖ½À´Ï´Ù. À̹ø °æ¿ì´Â,"member" ÂÊÀÌ "guest" ·Ñº¸´Ù ¸ÕÀú Á¶»çÇÒ ¼ö ÀÖ¾î ¿¹ÀÇ ÄÚµåÀÇ Ãâ·ÂÀº "allowed" µË´Ï´Ù.


[ÁÖÀÇ] ÁÖÀÇ

º¹¼öÀÇ ºÎ¸ð¸¦ ·Ñ·Î ÁöÁ¤ÇÏ´Â °æ¿ì´Â, ½ÂÀÎ Äõ¸®·ÎÀÇ ±ÔÄ¢ÀÇ °Ë»ö¼ø¼­¸¦ ±â¾ïÇØ µÓ½Ã´Ù. ¸¶Áö¸·¿¡ ÁöÁ¤ÇÑ ºÎ¸ð°¡ ÃÖÃÊ·Î ´ë»óÀÌ µË´Ï´Ù.

2.1.3. ¾×¼¼½º Á¦¾î ¸®½ºÆ® (ACL) ÀÇ ÀÛ¼º

ACL (À»)¸¦ »ç¿ëÇϰí, ¹°¸®Àû ȤÀº °¡»óÀûÀÎ ¿ÀºêÁ§Æ®ÀÇ Æí¼ºÀ» ¼Ò¸Á ´ë·Î¿¡ Ç¥ÇöÇÒ ¼ö ÀÖ½À´Ï´Ù.±×·¯³ª ¿©±â¿¡¼­´Â, ¼³¸í¿ëÀ¸·Î¼­ ±âº»ÀûÀÎ ÄÁÅÙÃ÷ °ü¸® ½Ã½ºÅÛ (CMS) ÀÇ ACL (À»)¸¦ »ý°¢ÇÕ´Ï´Ù. À̰ÍÀº, ´Ù¾çÇÑ ¿µ¿ª¿¡¼­ º¹¼ö °èÃþÀÇ ±×·ìÀ» °ü¸®ÇÏ´Â °ÍÀÔ´Ï´Ù. »õ·Ó´Ù ACL ¿ÀºêÁ§Æ®¸¦ ÀÛ¼ºÇÏ·Á¸é , ¾Æ¹«°Íµµ ÆÄ¶ó¹ÌÅ͸¦ ÁöÁ¤ÇÏÁö ¾Ê°í ACL ÀÇ ÀνºÅϽº¸¦ ÀÛ¼ºÇÕ´Ï´Ù.


<?php
require_once 'Zend/Acl.php';

$acl = new Zend_Acl();
[ÁÖÀÇ] ÁÖÀÇ

°³¹ßÀÚ°¡ "allow" ±ÔÄ¢À» ÁöÁ¤ÇÏÁö ¾Ê´Â ÇÑ,Zend_Acl (Àº)´Â ¸ðµç ·ÑÀÇ ¸ðµç ÀÚ¿ø»óÀÇ ±ÇÇÑÀ¸·ÎºÎÅÍÀÇ ¾×¼¼½ºµµ °ÅºÎÇÕ´Ï´Ù.

2.1.4. ·ÑÀÇ µî·Ï

ÄÁÅÙÃ÷ °ü¸® ½Ã½ºÅÛ¿¡¼­´Â, °ÅÀÇ ¸ðµç Àå¸é¿¡¼­ ±ÇÇÑ °èÃþÀÇ °ü¸®°¡ ÇÊ¿äÇÕ´Ï´Ù. À̰Ϳ¡ ÀÇÇØ, À¯ÀúÀÇ ÆíÁý ±ÇÇÑÀ» °áÁ¤ÇÕ´Ï´Ù.¿¹¸¦ µé¾î 'Guest' ±×·ì¿¡ ´ëÇØ¼­´Â µ¥¸ð¿ëÀ¸·Î ÇÑÁ¤ÇÑ ¾×¼¼½º±ÇÇѸ¸À» Çã°¡ÇØ, 'Staff' ±×·ìÀº Åë»óÀÇ Á¶ÀÛÀ» ÇÏ´Â ´ëºÎºÐÀÇ CMS À¯Àú¿ëÀ¸·Î ÀÛ¼ºÇØ, 'Editor' ±×·ì¿¡´Â ÄÁÅÙÃ÷ÀÇ °ø°³³ª ¸®ºä, º¸Á¸À̳ª »èÁ¦ÀÇ ±ÇÇÑÀ» ÁÖ¾î ¸¶Áö¸·¿¡ 'Administrator' (Àº)´Â, ±× ¿ÜÀÇ ¸ðµç ±×·ìÀÇ ±ÇÇÑ¿¡ °¡¼¼ÇØ ±â¹Ð Á¤º¸ÀÇ °ü¸®³ª À¯Àú °ü¸®, µ¥ÀÌÅÍÀÇ ¹é¾÷/export ±â´ÉÀ» Áشٰí ÇÑ °Íó·³ µË´Ï´Ù. ÀÌ·¯ÇÑ ±ÇÇÑÀ», ·Ñ ·¹Áö½ºÆ®¸®·Î ³ªÅ¸³¾ ¼ö ÀÖ½À´Ï´Ù. °¢ ±×·ìÀÇ ±ÇÇÑÀ» 'ºÎ¸ðÀÇ' ±×·ìÀ¸·ÎºÎÅÍ °è½Â½ÃÄÑ, ±× ±×·ì¿¡ °íÀ¯ÀÇ ±ÇÇÑÀ» Ãß°¡·Î Á¤ÀÇÇÕ´Ï´Ù. ÀÌ·¯ÇÑ ±ÇÇÑÀ» Á¤¸®Çϸé, ´ÙÀ½°ú °°ÀÌ µË´Ï´Ù.

Ç¥ 2.1. »ùÇà CMS ¿ë¹«ÀÇ ¾×¼¼½º Á¦¾î

À̸§ ±ÇÇÑ °è½ÂÇÏ´Â ±ÇÇÑÀÇ °è½Â¿ø
Guest View ¾øÀ½
Staff Edit, Submit, Revise Guest
Editor Publish, Archive, Delete Staff
Administrator (¸ðµç ¾×¼¼½º¸¦ Çã°¡) ¾øÀ½

ÀÌ ¿¹¿¡¼­´Â Zend_Acl_Role (À»)¸¦ ÀÌ¿ëÇϰí ÀÖ½À´Ï´Ù¸¸, Zend_Acl_Role_Interface (À»)¸¦ ½ÇÀåÇϰí ÀÖ´Â ¿ÀºêÁ§Æ®¶ó¸é ¹¹µçÁö »ç¿ë °¡´ÉÇÕ´Ï´Ù. ÀÌ·¯ÇÑ ±×·ìÀ», ´ÙÀ½°ú °°ÀÌ ÇØ ·Ñ ·¹Áö½ºÆ®¸®¿¡ Ãß°¡ÇÕ´Ï´Ù.


<?php
require_once 'Zend/Acl.php';

$acl = new Zend_Acl();

// Zend_Acl_Role (À»)¸¦ »ç¿ëÇϰí, ±×·ìÀ» ·Ñ ·¹Áö½ºÆ®¸®¿¡ Ãß°¡ÇÕ´Ï´Ù
require_once 'Zend/Acl/Role.php';

// Guest (Àº)´Â ¾×¼¼½º Á¦¾î¸¦ °è½ÂÇÏÁö ¾Ê½À´Ï´Ù
$roleGuest = new Zend_Acl_Role('guest');
$acl->addRole($roleGuest);

// Staff ÇÏ guest ÀÇ ±ÇÇÑÀ» °è½ÂÇÕ´Ï´Ù
$acl->addRole(new Zend_Acl_Role('staff'), $roleGuest);

/* È¤Àº, À§ÀÇ ³»¿ëÀº ´ÙÀ½°ú °°ÀÌ ¾µ ¼öµµ ÀÖ½À´Ï´Ù
$acl->addRole(new Zend_Acl_Role('staff'), 'guest');
//*/

// Editor ÇÏ staff ÀÇ ±ÇÇÑÀ» °è½ÂÇÕ´Ï´Ù
$acl->addRole(new Zend_Acl_Role('editor'), 'staff');

// Administrator (Àº)´Â ¾×¼¼½º Á¦¾î¸¦ °è½ÂÇÏÁö ¾Ê½À´Ï´Ù
$acl->addRole(new Zend_Acl_Role('administrator'));

2.1.5. ¾×¼¼½º Á¦¾îÀÇ Á¤ÀÇ

ACL ¿¡ ÀûÀýÇÑ ·ÑÀÌ Æ÷ÇÔµÈ »óŰ¡ µÇ¾ú½À´Ï´Ù.À̰ÍÀ¸·Î, ÀÚ¿ø¿¡ ´ëÇØ¼­ ·ÑÀÌ ¾î¶»°Ô ¾×¼¼½º Çϴ°¡ ÇÏ´Â ±ÔÄ¢À» Á¤ÀÇÇÒ ¼ö ÀÖ´Â »óŰ¡ µÇ¾ú½À´Ï´Ù. ÀÌ ¿¹¿¡¼­´Â ƯÁ¤ÀÇ ÀÚ¿øÀ» Á¤ÀÇÇϰí ÀÖÁö ¾Ê´Â °Í¿¡ ±âºÐ±Í´ìµµ ¾Ë·ÁÁöÁö ¾Ê½À´Ï´Ù. ÀÌ °æ¿ì, ±ÔÄ¢Àº ¸ðµç ÀÚ¿ø¿¡ ´ëÇØ¼­ Àû¿ëµË´Ï´Ù. Zend_Acl (À»)¸¦ »ç¿ëÇϸé, Àü¹ÝÀûÀÎ °ÍÀ̵çÁö Ư¼öÇÑ °ÍÀ̵çÁö ±ÔÄ¢À» Àû¿ëÇÏ´Â °Í¸¸À¸·Î Á¤ÀÇÇÒ ¼ö ÀÖ°Ô µË´Ï´Ù. ÀÚ¿øÀ̳ª ·ÑÀº, ±× °è½Â¿øÀ¸·Î Á¤Àǵǰí ÀÖ´Â ±ÔÄ¢À» °è½ÂÇϱ⠶§¹®ÀÔ´Ï´Ù.

±× ¶§¹®¿¡, º¹ÀâÇÑ ±ÔÄ¢ÀÇ Æí¼ºÀ» ÃÖ¼ÒÇÑÀÇ ÄÚµå·Î Á¤ÀÇÇÒ ¼ö ÀÖ°Ô µË´Ï´Ù. À§¿¡¼­ Á¤ÀÇÇÑ ±âº»ÀûÀÎ ±ÇÇÑÀ» Àû¿ëÇÏ·Á¸é , ´ÙÀ½°ú °°ÀÌ ÇÕ´Ï´Ù.


<?php
require_once 'Zend/Acl.php';

$acl = new Zend_Acl();

require_once 
'Zend/Acl/Role.php';

$roleGuest = new Zend_Acl_Role('guest');
$acl->addRole($roleGuest);
$acl->addRole(new Zend_Acl_Role('staff'), $roleGuest);
$acl->addRole(new Zend_Acl_Role('editor'), 'staff');
$acl->addRole(new Zend_Acl_Role('administrator'));

// Guest (Àº)´Â, ÄÁÅÙÃ÷¸¦ ¿­¶÷ÇÏ´Â Àϵµ¿¡°¡ °¡´ÉÇÕ´Ï´Ù
$acl->allow($roleGuestnull'view');

/* À§¿Í °°Àº ³»¿ëÀ», ÀÌ¿Í °°ÀÌ ¾µ ¼öµµ ÀÖ½À´Ï´Ù
$acl->allow('guest', null, 'view');
//*/

// Staff ÇÏ guest ÀÇ ±ÇÇÑÀ» ¸ðµÎ °è½ÂÇÑ µ¥´Ù°¡, ÇÑÃþ ´õ Ãß°¡ÀÇ ±ÇÇÑÀ» ÇÊ¿ä·Î ÇÕ´Ï´Ù
$acl->allow('staff'null, array('edit''submit''revise'));

// Editor (Àº)´Â,staff ÀÇ ±ÇÇÑ (view,edit,submit ¹× revise)
// (À»)¸¦ °è½ÂÇÑ µ¥´Ù°¡, ÇÑÃþ ´õ Ãß°¡ÀÇ ±ÇÇÑÀ» ÇÊ¿ä·Î ÇÕ´Ï´Ù
$acl->allow('editor'null, array('publish''archive''delete'));

// Administrator (Àº)´Â ¾Æ¹«°Íµµ °è½ÂÇÏÁö ¾Ê½À´Ï´Ù¸¸, ¸ðµç ±ÇÇÑÀÌ ÀÎÁ¤µÇ°í ÀÖ½À´Ï´Ù
$acl->allow('administrator');

À§ÀÇ allow() ÀÇ ÄÝ¿¡ À־ÀÇ null (Àº)´Â, ±ÔÄ¢À» ¸ðµç ÀÚ¿ø¿¡ ´ëÇØ¼­ Àû¿ëÇÏ´Â °ÍÀ» ÀǹÌÇÕ´Ï´Ù.

2.1.6. ACL ¿¡ÀÇ ¹®ÀÇ

À̰ÍÀ¸·Î, À¯¿¬ÇÑ ACL ÇÏÁö¸¸ ÀÛ¼ºÇÒ ¼ö ÀÖ¾ú½À´Ï´Ù.À̰Ϳ¡ ÀÇÇØ, À¥ ¾îÇø®ÄÉÀ̼ÇÀÇ »ç¿ëÀÚ°¡, ¾î´À ±â´ÉÀ» »ç¿ëÇϱâ À§Çؼ­ ÇÊ¿äÇÑ ±ÇÇÑÀ» °¡Áö°í ÀÖÀ»±î¸¦ Á¶»çÇÒ ¼ö ÀÖ°Ô µÇ¾ú½À´Ï´Ù. ¹®ÀǸ¦ ½Ç½ÃÇÏ´Â °ÍÀº °£´ÜÇϰí, ´ÜÁö isAllowed() ¸Þ¼Òµå¸¦ »ç¿ëÇÒ »ÓÀÔ´Ï´Ù.


<?php
echo $acl->isAllowed('guest'null'view') ?
     
"allowed" "denied"// allowed µË´Ï´Ù

echo $acl->isAllowed('staff'null'publish') ?
     
"allowed" "denied"// denied µË´Ï´Ù

echo $acl->isAllowed('staff'null'revise') ?
     
"allowed" "denied"// allowed µË´Ï´Ù

echo $acl->isAllowed('editor'null'view') ?
     
"allowed" "denied"// guest (À¸)·ÎºÎÅÍ °è½ÂÇϰí ÀÖÀ¸¹Ç·Î allowed µË´Ï´Ù

echo $acl->isAllowed('editor'null'update') ?
     
"allowed" "denied"// 'update' ¿ë¹«ÀÇ ±ÔÄ¢ÀÌ ¾ø±â ¶§¹®¿¡ denied µË´Ï´Ù

echo $acl->isAllowed('administrator'null'view') ?
     
"allowed" "denied"// administrator (Àº)´Â ¸ðµç ±ÇÇÑÀÌ Çã°¡µÇ°í ÀÖÀ¸¹Ç·Î allowed µË´Ï´Ù

echo $acl->isAllowed('administrator') ?
     
"allowed" "denied"// administrator (Àº)´Â ¸ðµç ±ÇÇÑÀÌ Çã°¡µÇ°í ÀÖÀ¸¹Ç·Î allowed µË´Ï´Ù

echo $acl->isAllowed('administrator'null'update') ?
     
"allowed" "denied"// administrator (Àº)´Â ¸ðµç ±ÇÇÑÀÌ Çã°¡µÇ°í ÀÖÀ¸¹Ç·Î allowed µË´Ï´Ù