ตัวอย่างเช่น Administrator ใช้งานหน้า admin สามารถ insert/update/delete ได้ทุกอย่าง, นาย A สามารถ insert/update/delete ข่าวได้อย่างเดียว และนาย B สามารถ insert/update/delete ข้อมูลสินค้าได้อย่างเดียว เป็นต้น
หรืออีกตัวอย่าง ถ้าเป็นกรณี Blogging service คุณเจ้าของ blog สามารถ read/write/publish/edit/delete blog ของตัวเองได้ และ guest (คนทั่วไป) สามารถ read ได้อย่างเดียว เป็นต้น
เหล่านี้เขาเรียกว่า ACL - Access Control List
ใน Zend_Acl ก็จะเกี่ยวข้องกับ 2 สิ่ง ได้แก่:
- resource คือ สิ่งที่จะถูกคุม เช่น ข่าว, สินค้า, blog, อัลบั้มภาพ เป็นต้น โดยใน Zend_Acl ได้เตรียม Zend_Acl_Resource ไว้ให้ใช้ และมี Zend_Acl_Resource_Interface ไว้ให้ด้วย ถ้าจะ extends ไป implement
- role คือ สิ่งที่จะทำการเข้าถึง resource เช่น การเขียน, การอ่าน, การลบ เป็นต้น โดยใน Zend_Acl ได้เตรียม Zend_Acl_Role ไว้ให้ใช้ และมี Zend_Acl_Role_Interface ไว้ให้ด้วย ถ้าจะ extends ไป implement
ตัวอย่างการใช้งาน
สมมติว่าเรามีกฏ ในการใช้งานหน้า admin ดังนี้Name | Permissions | Resource |
news_staff | insert, update, delete | news |
guestbook_staff | insert, update, delete | guestbook |
administrator | (Granted all access) | N/A |
$acl = new Zend_Acl(); // register resources เข้าไปใน acl หรือ เป็นการบอก acl ว่ามี resources อะไรบ้าง // หรือ ใน acl ของเรา มีข้อมูลอะไรบ้าง $acl->add(new Zend_Acl_Resource('news')); $acl->add(new Zend_Acl_Resource('guestbook')); // register roles เข้าไปใน acl // หรือ ใน acl ของเรา มีการเข้าใช้งานแบบไหนบ้าง // กรณีนี้ เราจะแบ่งเป็น type ของ admin คือเรามี admin 3 ประเภท // ได้แก่ news_staff, questbook_staff และ administrator // ซึ่งจะเข้าใช้งาน resource ได้ตามตารางด้านบน $acl->addRole(new Zend_Acl_Role('news_staff')); $acl->addRole(new Zend_Acl_Role('questbook_staff')); $acl->addRole(new Zend_Acl_Role('administrator')); // roles for 'news_staff' $acl->allow('news_staff', 'news', 'insert'); $acl->allow('news_staff', 'news', 'update'); $acl->allow('news_staff', 'news', 'delete'); // roles for 'questbook_staff' $acl->allow('questbook_staff', 'questbook', 'insert'); $acl->allow('questbook_staff', 'questbook', 'update'); $acl->allow('questbook_staff', 'questbook', 'delete'); // administrator ทำได้ทุกอย่าง (ทุก roles บนทุก resources) ถ้าไม่ระบุ resource และไม่ระบุ $acl->allow('administrator');
// ประเภทของ admin user อาจจะได้จากหลังจาก login แล้ว // เราก็ fetch เอาข้อมูลของ admin user นี้มาดู ว่าเขาเป็น type อะไร // ในที่นี้สมมตืว่าเขาเป็น news_staff $theAdminType = 'news_staff'; // 'news_staff' ที่เป็นประเภทของ admin user ของเรานี้ จะถูกใช้เป็น key ของ roles echo $acl->isAllowed($theAdminType, 'news', 'insert') ? 'allowed' : 'denied'; // จะได้ allowed echo $acl->isAllowed($theAdminType, 'news', 'update') ? 'allowed' : 'denied'; // จะได้ allowed echo $acl->isAllowed($theAdminType, 'news', 'delete') ? 'allowed' : 'denied'; // จะได้ allowed echo $acl->isAllowed($theAdminType, 'guestbook', 'insert') ? 'allowed' : 'denied'; // จะได้ denied echo $acl->isAllowed($theAdminType, 'guestbook', 'update') ? 'allowed' : 'denied'; // จะได้ denied echo $acl->isAllowed($theAdminType, 'guestbook', 'delete') ? 'allowed' : 'denied'; // จะได้ denied // เมื่อระบุ resource เป็น 'guestbook' จะได้ 'denied' เพราะว่า $theAdminType เป็น 'news_staff' // ลองจำลองว่า ประเภทของ admin user เป็น administrator $theAdminType = 'administrator'; echo $acl->isAllowed($theAdminType, 'news', 'insert') ? 'allowed' : 'denied'; // จะได้ allowed echo $acl->isAllowed($theAdminType, 'news', 'update') ? 'allowed' : 'denied'; // จะได้ allowed echo $acl->isAllowed($theAdminType, 'news', 'delete') ? 'allowed' : 'denied'; // จะได้ allowed echo $acl->isAllowed($theAdminType, 'guestbook', 'insert') ? 'allowed' : 'denied'; // จะได้ allowed echo $acl->isAllowed($theAdminType, 'guestbook', 'update') ? 'allowed' : 'denied'; // จะได้ allowed echo $acl->isAllowed($theAdminType, 'guestbook', 'delete') ? 'allowed' : 'denied'; // จะได้ allowed // ได้ 'allowed' หมด เพราะว่า 'administrator' สามารถทำได้ทุกอย่าง กับทุก resources
ไม่มีความคิดเห็น:
แสดงความคิดเห็น