กำหนดสิทธิใส่ string ธรรมดาๆ ครับ
อย่างเช่นสิทธิ
B
F
G
และ
K
ก็เก็บ B,F,G,K ลง db ไปเลย แล้วเวลาแก้ไขสิทธิก็เอาข้อมูลนี้มาเติมให้ checkbox
แต่ถ้าเลือกแค่ F,G แต่ไม่เลือก B จะมองไม่เห็นเมนู F,G ครับ แต่สิทธิเข้ายังเหมือนเดิม
ปกติตามโครงสร้าง tree โหนดแต่ละโหนดจะเข้าถึงกันได้ทั้งหมด แต่....ถ้าต้องเข้าถึงโหนดในระดับอื่นๆหรือไม่ได้อยู่ติดกันก็ต้องผ่านโหนดที่เป็นทางผ่านก่อนที่จะถึงโหนดที่ต้องการเสมอครับ...
ถ้าเราลองมองมันให็เหมือนกันกับ Folder tree ของ Windows ล่ะครับ การเข้าถึง Folder ต้องมีสิทธิ์ในการเข้าถึงกำกับทุก Folder เสมอ เพราะฉะนั้นถ้าเรากำหนดสิทธิ์ของ user ให้เข้าถึง B, F, G และ K ได้ หรือจะเพิ่มสิทธิ์เพื่อให้เข้าถึงจุดไหนก็ได้ตามต้องการ.... ตรงนี้ไม่รู้ว่าจะแก้ปัญหาให้ จขกท ได้หรือไม่นะครับ
.............................................
เท่าที่ผมเคยสัมผัสมาในเรื่องของการกำหนดสิทธิ์การเข้าถึงเมนูหรือส่วนต่างๆของโปรแกรมนะครับ... ยกตัวอย่างการเขียน web site ก็คือ มีสองส่วน
1. ก็คือตารางการเก็บ user และมีฟิลดิ์เพื่อระบุว่ามีสิทธิ์อะไรในการเข้าถึงได้บ้าง
2. ส่วนของเมนูที่จะแสดงให้เห็นเฉพาะ user ที่มีสิทธิ์เท่านั้น โดยการสร้างตารางขึ้นมาเพื่อเก็บชื่อเมนูต่างๆ โดยที่มีฟิลดิ์ id และ parent id เพื่อเป็นการบอกว่าเมนูไหนอยู่ sub menu ไหนด้วย
ปกติเราจะสร้างเมนูด้วยการ hard code ขึ้นมาเลย ทำให้เราแก้ไขเมนูไม่ค่อยสะดวกนัก ผมจึงใช้วิธีสร้างเมนูขึ้นมาจากตารางของฐานข้อมูล เพราะฉะนั้นมันจึงสามารถ where รายชื่อเมนูตามที่เราต้องการได้เลย และการปรับปรุงเมนูก็โดยการทำหน้าจอเพื่อ insert หรือ edit ได้เลย
เมื่อ user เข้ามาในระบบ ในขั้นนี้เราจะได้ permission ของแต่ละ user มาก่อนใช่มั้ยครับ โดยอาจจะเก็บในรูปแบบใดก็ได้ตามถนัด
หลังจากนั้นก็ให้ระบบเอา permission ที่ได้มาไปประมวลผลให้อยู่ในรูปของตัวแปร เพื่อเอาไปใช้กับเงื่อนไขในการแสดงเมนู
ยกตัวอย่าง...
Code (PHP)
//ก่อนสร้างเมนูก็จัดการตัวแปร permission ก่อน
$permission = user_permission; //user_permission ได้มาจากตาราง user อาจจะได้มาจากการ POST ข้อมูลมาจากหน้าเพจก่อนหน้าก็ได้
//หลังจากได้ตัวแปรมาแล้วก็เอาไปใส่ในเงื่อนไข
//เนื่องจากเมนูจะถูกสร้างขึ้นมาจากตารางในฐานข้อมูล
//เราจึงสามารถใช้ WHERE เขามาเป็นเงื่อนไขได้ครับ
$sql = "SELECT * FROM menu WHERE $permission";
//เราก็จะได้เมนูเท่าที่เงื่อนไขกำหนดขึ้นมาแสดงเท่านั้น