12/04/2026 18:17น.

EP.57 การเพิ่มฟีเจอร์การควบคุมการเข้าถึงห้องแชท (Access Control)
#Go
#WebSocket Server
#real-time access control
#การพัฒนาแอปพลิเคชันแชท
#ฟีเจอร์ WebSocket
#user management in chat rooms
#chat room access control
#WebSocket chat access
#Access control WebSocket
ฟีเจอร์การควบคุมการเข้าถึงห้องแชท (Access Control) ช่วยให้ผู้ดูแลห้องแชทสามารถควบคุมและจัดการการเข้าถึงห้องแชทได้ตามสิทธิที่กำหนด โดยผู้ดูแลสามารถอนุมัติหรือปฏิเสธผู้ใช้ที่ต้องการเข้าร่วมในห้องแชทฟีเจอร์นี้ทำให้การสนทนาในห้องแชทมีความปลอดภัยและเป็นระเบียบมากยิ่งขึ้น
ทำไมต้องมีฟีเจอร์การควบคุมการเข้าถึงห้องแชท?
ฟีเจอร์การควบคุมการเข้าถึงห้องแชทเป็นสิ่งสำคัญสำหรับการจัดการการสนทนาในห้องแชท เพื่อให้ผู้ดูแลห้องแชทสามารถกำหนดได้ว่าใครสามารถเข้าร่วมการสนทนาในห้องนั้นๆ ได้ ฟีเจอร์นี้เหมาะสำหรับการสร้างห้องแชทที่มีความเป็นส่วนตัว หรือห้องแชทที่ต้องการควบคุมสมาชิกเฉพาะกลุ่ม
ข้อดีของการควบคุมการเข้าถึงห้องแชท:
- เพิ่มความปลอดภัยในการสนทนา: ทำให้ผู้ดูแลห้องแชทสามารถควบคุมว่าใครสามารถเข้าร่วมการสนทนาได้
- ช่วยให้การจัดการห้องแชทเป็นระเบียบ: ผู้ดูแลสามารถจัดการผู้ใช้ที่เข้ามาในห้องแชทได้อย่างมีประสิทธิภาพ
- เหมาะสำหรับห้องแชทที่ต้องการความเป็นส่วนตัว: ผู้ดูแลสามารถเลือกได้ว่าผู้ใดที่สามารถเข้าร่วมได้
โครงสร้างของฟีเจอร์การควบคุมการเข้าถึงห้องแชท
ฟีเจอร์การควบคุมการเข้าถึงห้องแชทจำเป็นต้องมีการตรวจสอบสิทธิ์ของผู้ใช้ในระบบ โดยจะต้องเชื่อมโยงกับข้อมูลผู้ใช้ในฐานข้อมูลและตรวจสอบว่าผู้ใช้คนใดสามารถเข้าร่วมการสนทนาในห้องนั้นได้
ส่วนประกอบหลักของระบบการควบคุมการเข้าถึงห้องแชท:
- การเก็บข้อมูลผู้ใช้ในฐานข้อมูล: ข้อมูลเกี่ยวกับผู้ใช้ เช่น สิทธิ์การเข้าร่วมจะต้องถูกเก็บในฐานข้อมูล
- การตรวจสอบสิทธิ์การเข้าถึง: ระบบจะต้องสามารถตรวจสอบสิทธิ์ของผู้ใช้และอนุมัติหรือปฏิเสธการเข้าร่วม
- การจัดการการเข้าถึงห้องแชท: เมื่อผู้ใช้พยายามเข้าร่วมห้องแชท ระบบจะต้องสามารถอนุมัติหรือปฏิเสธการเข้าร่วมได้ตามสิทธิ์ของผู้ใช้
วิธีการเพิ่มฟีเจอร์การควบคุมการเข้าถึงห้องแชทใน WebSocket Server
การอัปเดต WebSocket Server เพื่อรองรับการควบคุมการเข้าถึงห้องแชทใน WebSocket Chat โดยใช้ระบบสิทธิ์และการตรวจสอบผู้ใช้ที่เข้าร่วม
ขั้นตอนที่ต้องทำ:
- การอัปเดต WebSocket Server เพื่อรองรับการตรวจสอบการเข้าถึงห้องแชท: เซิร์ฟเวอร์ต้องสามารถตรวจสอบสิทธิ์ของผู้ใช้ในห้องแชทได้
- การอัปเดตฐานข้อมูล: เราต้องเพิ่มคอลัมน์หรือฟิลด์ที่ใช้จัดเก็บข้อมูลสิทธิ์ของผู้ใช้ เช่น
access_level - การอนุมัติหรือปฏิเสธการเข้าร่วม: เมื่อมีผู้ใช้พยายามเข้าร่วมห้องแชท ระบบจะต้องสามารถอนุมัติหรือปฏิเสธการเข้าร่วมได้ตามสิทธิ์ของผู้ใช้
การสร้าง UI สำหรับการควบคุมการเข้าถึงห้องแชท
เพื่อให้ผู้ดูแลห้องแชทสามารถจัดการการเข้าร่วมของผู้ใช้ได้ เราจะเพิ่ม UI ที่ให้ผู้ดูแลสามารถอนุมัติหรือปฏิเสธการเข้าห้องแชทได้
ส่วนประกอบของ UI:
- เพิ่มปุ่ม "อนุมัติ" หรือ "ปฏิเสธ" ใน UI: ให้ผู้ดูแลห้องแชทสามารถอนุมัติหรือปฏิเสธผู้ที่ต้องการเข้าห้องแชท
- แสดงสถานะการเข้าถึง: UI จะแสดงสถานะของผู้ใช้ในห้องแชท เช่น "เข้าร่วมแล้ว", "รออนุมัติ" หรือ "ถูกปฏิเสธ"
- แสดงรายชื่อผู้ที่รออนุมัติ: UI จะมีฟีเจอร์แสดงรายชื่อผู้ที่ยังไม่ได้รับอนุมัติให้เข้าห้องแชท
การทดสอบฟีเจอร์การควบคุมการเข้าถึงห้องแชท
หลังจากเพิ่มฟีเจอร์การควบคุมการเข้าถึงห้องแชทแล้ว เราต้องทดสอบว่าระบบทำงานได้ตามที่คาดหวัง
การทดสอบที่ควรทำ:
- ทดสอบการตรวจสอบสิทธิ์ผู้ใช้: ทดสอบว่าเมื่อผู้ใช้พยายามเข้าร่วมห้องแชท ระบบสามารถตรวจสอบสิทธิ์และอนุมัติหรือปฏิเสธการเข้าร่วมได้
- ทดสอบการแสดงสถานะผู้ใช้ใน UI: ตรวจสอบว่า UI แสดงสถานะการเข้าถึงห้องแชทของผู้ใช้ได้ถูกต้อง
- ทดสอบการจัดการห้องแชทโดยผู้ดูแล: ทดสอบว่าผู้ดูแลสามารถอนุมัติและปฏิเสธผู้ใช้ได้ตามสิทธิ์
ตัวอย่างโค้ดสำหรับการควบคุมการเข้าถึงห้องแชทใน WebSocket Chat
การอัปเดตฐานข้อมูล (Database)
เพิ่มคอลัมน์ access_level เพื่อเก็บข้อมูลสิทธิ์การเข้าร่วมห้องแชทของผู้ใช้
ALTER TABLE users ADD COLUMN access_level VARCHAR(50) DEFAULT 'guest';
โค้ดใน WebSocket Server (Backend)
อัปเดต WebSocket Server เพื่อรองรับการตรวจสอบสิทธิ์การเข้าร่วมห้องแชท
package main
import (
"database/sql"
"encoding/json"
"fmt"
"net/http"
"sync"
"github.com/gorilla/websocket"
_ "github.com/lib/pq"
)
type AccessRequest struct {
Username string `json:"username"`
RoomID string `json:"roomID"`
}
type AccessResponse struct {
Success bool `json:"success"`
Message string `json:"message"`
}
var (
clients = make(map[*websocket.Conn]bool)
broadcast = make(chan AccessResponse)
mu sync.Mutex
db *sql.DB
)
func handleAccessControl(w http.ResponseWriter, r *http.Request) {
conn, _ := upgrader.Upgrade(w, r, nil)
defer conn.Close()
clients[conn] = true
for {
var request AccessRequest
err := conn.ReadJSON(&request)
if err != nil {
delete(clients, conn)
break
}
var accessLevel string
err = db.QueryRow("SELECT access_level FROM users WHERE username = $1", request.Username).Scan(&accessLevel)
if err != nil {
broadcast <- AccessResponse{Success: false, Message: "User not found"}
continue
}
if accessLevel == "admin" {
broadcast <- AccessResponse{Success: true, Message: "Access granted"}
} else {
broadcast <- AccessResponse{Success: false, Message: "Access denied"}
}
}
}
func notifyClients() {
for {
msg := <-broadcast
for client := range clients {
err := client.WriteJSON(msg)
if err != nil {
client.Close()
delete(clients, client)
}
}
}
}
func main() {
http.HandleFunc("/ws", handleAccessControl)
go notifyClients()
fmt.Println("WebSocket Server Running on Port 8080")
http.ListenAndServe(":8080", nil)
}
โค้ดใน Frontend (Client)
เพิ่ม UI สำหรับการจัดการการเข้าห้องแชท
const socket = new WebSocket("ws://localhost:8080/ws");
const chatContainer = document.getElementById("chat-container");
socket.onmessage = (event) => {
const data = JSON.parse(event.data);
const messageElement = document.createElement("p");
messageElement.innerText = data.message;
chatContainer.appendChild(messageElement);
};
function requestAccess(username, roomID) {
socket.send(JSON.stringify({ username, roomID }));
}
ท้าให้ลอง!
ลองเพิ่มฟีเจอร์ การแสดงสถานะการเข้าถึงห้องแชท เพื่อให้ผู้ใช้สามารถเห็นสถานะการเข้าถึงห้องแชทได้อย่างชัดเจน!
EP ถัดไป:
ใน EP ถัดไป เราจะมาดู การเพิ่มฟีเจอร์การแจ้งเตือนแบบพุช (Push Notification) เพื่อให้ผู้ใช้สามารถรับการแจ้งเตือนในขณะมีข้อความใหม่หรือการเปลี่ยนแปลงสำคัญในห้องแชท!