CakePHP 1.2.0.6311b กับ ACL ตอนที่ 1

ผมลองเอา CakePHP 1.2.0.6311b มาลองเล่นดู มันยังไม่เป็น stable release เลยเล่นๆไปก่อน.  CakePHP นี่ก็เป็น web framework ประมาณว่าทำให้ PHP เล่นง่ายๆ code เท่ห์เป็นระเบียบแบบ MVC คล้ายๆ Ruby on Rails ถึงจะไม่เหมือนซะทีเดียวก็ตาม  … ที่สำคัญคือหา Host ง่ายแบบ PHP.

ผมอยากลองใช้ ACL (Acess control lists) ดู ประมาณว่าเป็น list ที่บอกว่า “ใคร” ใช้หน้าไหนในเว็บได้บ้าง (จริงๆอาจจะไม่ใช่หน้าก็ได้มั้ง). แต่ว่า ACL ของ CakePHP ไม่ได้มารวมกับ User authentication ก็แปลกๆดีเหมือนกัน. ของ Turbogears มีตัว generate code ให้เวลาจะทำอะไรพวกนี้ แต่เหมือนของ CakePHP ต้องมาปรับเองเยอะเหมือนกัน. อนาคตหวังว่าจะไปรวมกับ LDAP, OpenID อะไรสารพัดได้ด้วย. แต่ก่อนจะไปถึงขนาดนั้นลองใช้แบบง่ายๆ ให้ได้ก่อนดีกว่า😛

เวลาลง CakePHP แล้วต้องเปลี่ยนค่า Salt คืออะไรก็ไม่รู้อะใน app/config/core.php

Configure::write('Security.salt', 'เปลี่ยนค่าตรงนี้');

แล้วก็ตั้งค่า database ใน app/config/database.php แต่ว่าทีแรกไม่มีไฟล์ database.php เราก็ copy มาจาก database.php.default ได้เลย แล้วก็แก้ค่าข้างในเอา

class DATABASE_CONFIG {
    var $default = array(
        'driver' => 'mysql',
        'persistent' => false,
        'host' => 'localhost',
        'port' => '',
        'login' => 'ชื่อผู้ใช้ของ database',
        'password' => 'password',
        'database' => 'ชื่อ database',
        'schema' => '',
        'prefix' => '',
        'encoding' => ''
    );
   ...
}

ที่นี้ก็เริ่มสร้าง table ของ database ที่ใช้เก็บ acl ได้. จริงๆแล้ว acl เก็บในไฟล์ก็ได้ แต่ว่าผมอยากเก็บใน database ก็เริ่มสร้างแบบใช้ database เลยดีกว่า.

$ php cake/console/cake.php schema run create DbAcl

เดิมทีเหมือนในคู่มือเขาใช้คำสั่ง php acl.php initdb แต่เหมือนใน version 1.2.x นี่จะเปลี่ยนไปมั้ง?

พอเราเรียกดู table ใน mysql แบบข้างล่าง

$ mysql -fAss -u<ชื่อผู้ใช้> -p<รหัสผ่าน> -e ‘show tables;’ <ชื่อ database>

ก็จะได้ผลออกมาแบบนี้

acos
aros
aros_acos

ก็แสดงว่ามี table ครบแล้ว.

ที่นี้ก็จะลอง create พวก ARO และ ACO ดู. ARO ก็ประมาณว่าคือผู้ใช้ หรือ role ของผู้ใช้ และ ACO ก็เป็นเว็บ หรือของอื่นๆที่จะโดน access.

ผมลองใช้ command นี้ดู

$ php cake/console/cake.php acl create aro / User

ใน ACL นี่ของทุกอย่างจะอยู่ในโครงสร้างต้นไม้. / บอกว่าเป็นราก (root). ในที่นี้คือ User เป็นลูกของ root. และอาจจะบอกว่า Translator (นักแปล) เป็น User แบบหนึ่งโดยการเขียนว่า php cake/console/cake.php acl create aro User Translator.

อย่างไรก็ตามคำสั่งข้างบนสั่งไปแล้วก็เจ๊ง😛. เพราะว่าเป็น bug ของ CakePHP มั้ง … แต่ก็ไม่ว่าอะไรอะนะเพราะ 1.2.x มันเป็น Beta อยู่. ก็แก้แบบไม่ยากไปตามเว็บนี้ http://seeknstrike.net/archives/20 เพียงแต่ใส่ uses(‘string’) เข้าไปในบรรทัดล่างจาก uses(‘set’) ในไฟล์ cake/libs/model/datasources/dbo_source.php ตามนี้

uses('set');
uses('string'); // เพิ่มเข้าไป

ไปกินข้าวก่อน ไว้มาลองต่อครับ แฮ่ๆ

2 thoughts on “CakePHP 1.2.0.6311b กับ ACL ตอนที่ 1

ใส่ความเห็น

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / เปลี่ยนแปลง )

Twitter picture

You are commenting using your Twitter account. Log Out / เปลี่ยนแปลง )

Facebook photo

You are commenting using your Facebook account. Log Out / เปลี่ยนแปลง )

Google+ photo

You are commenting using your Google+ account. Log Out / เปลี่ยนแปลง )

Connecting to %s