GORAGOD.com

การกำหนดสิทธิของ User

บ่อยครั้ง ที่เราเห็นบางเว็บไซต์สามารถกำหนดสถานะของ User ได้หลายระดับ หรือ Admin ได้หลายระดับเช่น
  1. สมาชิกทั่วไป
  2. Admin ระดับสูงสุดที่สามารถทำได้ทุกอย่าง
  3. ผู้ช่วยแอดมิน
จะเห็นได้ว่าระบบสมาชิกทั่วๆไปจะไม่สามารถแบ่งแยกได้ว่าใครสามารถทำอะไรได้คือจะมีแต่ Admin กับสมาชิกเท่านั้น หรือบางทีเราอาจต้องการผู้ช่วยในการตรวจสอบกระทู้ต่างๆ เราก็ต้องตั้ง Admin ระดับที่ 3 ขึ้นมา การทำเช่นนี้ก็ไม่ยากอะไรครับ
  1. เพิ่มฟิลด์ status เป็นชนิด tinyint(2) เข้าไปอีกสักฟิลด์เพื่อเก็บสถานะ 1 ถึง 3 ดังเช่นข้างบน โดยกำหนด default ให้เป็น 1 คือเมื่อสมัครให้คนนั้นมีสถานะเป็นสมาชิกทั่วไปไว้ก่อน (ฟิลด์นี้ไม่ได้เก็บข้อมูลอะไรมากนัก 2 หลักคือสูงสุด 99 ก็เหลือเฟือ)
  2. ในกรณีนี้เราไม่จำเป็นต้องแยกฐานข้อมูลสมาชิกออกจากฐานข้อมูลของ Admin เนื่องจากเราสามารถระบุได้โดย status อยู่แล้ว (ผมเห็นชอบเขียนตารางสมาชิกทั่วไปกับตาราง Admin แยกกัน ซึ่งไม่จำเป็นเลยครับ เวลาจะตรวจสอบทีต้อง query กัน 2 ตาราง งงไปเปล่าๆ)
  3. การกำหนดให้ใครสามารถอยู่ในสถานะใดได้ ควรเป็น Admin ระดับสูงสุดเท่านั้น (ไม่งั้นคนอื่นแอบเลื่อยขาเก้าอี้ไม่รู้ด้วย) โดยอาจกำหนดโดยทำหน้ากำหนดสมาชิกทั่วไป(ออกแบบเพิ่มเติมจากเดิม) หรือ อาจกำหนดบนฐานข้อมูลโดยตรงก็ได้
  4. เมื่อมีการใช้งานสมาชิก ก็ให้ตรวจสอบเอาว่าสมาชิกที่ login มีสถานะเป็นอะไร และสามารถทำอะไรได้บ้าง หรือสามารถมีเมนูอะไรได้บ้าง
<?php
  // อ่านข้อมูลสมาชิกออกมาจากฐานข้อมูล
  $memer_result = mysql_fetch_array(); 
  // เขียนโค้ดเพื่อทำการตรวจสอบว่าเป็นสมาชิกจริงก่อน ก่อนจะผ่านไปบรรทัดต่อไป
  // ถ้าตรวจสอบผ่าน เป็นสมาชิก เวลาใช้งานให้ตรวจสอบสถานะของสมาชิก
  if ($memer_result['status'] == 2) {
    // แอดมินระดับสูงสุด ทำอะไรได้บ้างก็กำหนดเอา หรือสามารถมีเมนูอะไรได้ก็เขียนโค้ดเอา
  } elseif ($memer_result['status'] == 3) {
    // ผู้ช่วยแอดมิน ทำอะไรได้ก็กำหนดเอาเหมือนเดิม
  } else {
    // อื่นๆ ให้เป็นสมาชิกทั่วไป ทำอะไรได้บ้าง หรือสามารถมีเมนูอะไรได้ก็เขียนโค้ดเอา
  };

ก็เขียนโค้ดเพิ่มเติมเอาตามความเหมาะสมนะครับ ว่า สมาชิกระดับใดสามารถทำอะไรได้บ้าง หรือจะให้สมาชิกแต่ละระดับสามารถมีเมนูอะไรได้บ้าง ก็เขียนไว้ใน if ของแต่ละระดับ

ในการนำไปใช้งานจริงเรายังสามารถใช้ session เก็บสถานะ (status) เอาไว้ก็ได้เมื่อทำการ login สำเร็จ เวลาจะตรวจก็ตรวจเอาจาก session แทน แต่ขอเตือน ห้ามเก็บสถานะของสมาชิกไว้บน cookie นะครับ ไม่ปลอดภัยเอามากๆ