การกำหนดสิทธิของ 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 นะครับ ไม่ปลอดภัยเอามากๆ
ผู้เขียน goragod โพสต์เมื่อ 02 เม.ย. 2551 เปิดดู 17,313 ป้ายกำกับ PHP
^