PlusMagi's Blog By Pitt Phunsanit Backend,Cybersecurity Laravel: จัดการสิทธิ์ user ด้วย Spatie

Laravel: จัดการสิทธิ์ user ด้วย Spatie

ในโลกของการพัฒนาแอปพลิเคชันองค์กร (Enterprise Application) การจัดการสิทธิ์การเข้าถึง (Access Control List – ACL) หรือระบบ Role-Based Access Control (RBAC) ถือเป็นหัวใจสำคัญของความปลอดภัยของข้อมูล หากคุณกำลังมองหาโซลูชันที่ทรงพลังในการกำหนดว่าผู้ใช้แต่ละคนสามารถทำอะไรได้บ้างโดยไม่ต้องสร้างระบบความปลอดภัยที่ซับซ้อนตั้งแต่ต้น Spatie Laravel-Permission คือเครื่องมือที่นักพัฒนา Laravel ควรทราบ

บทความนี้จะนำคุณไปดูขั้นตอนการติดตั้งและใช้งาน Spatie เพื่อจัดการสิทธิ์ผู้ใช้ในโปรเจกต์ Laravel โดยเน้นการทำงานร่วมกับฐานข้อมูล PostgreSQL ซึ่งเป็นระบบที่แข็งแกร่งและเชื่อถือได้

⚙️ ขั้นตอนการติดตั้ง Spatie และการตั้งค่า PostgreSQL

ก่อนอื่น ให้มั่นใจว่าคุณได้ติดตั้ง Laravel 12 และ Jetstream (Livewire Stack) เรียบร้อยแล้ว จากนั้นเราจะทำการติดตั้ง Spatie และตั้งค่าให้เชื่อมต่อกับ PostgreSQL:

  1. ติดตั้ง Spatie Package:
    เปิด Terminal และติดตั้ง package สำหรับจัดการสิทธิ์:

    BASH / Shell

    composer require spatie/laravel-permission
    
  2. Publish Migration:
    เผยแพร่ไฟล์ migration ของ Spatie เพื่อให้ระบบรู้จักตารางที่จำเป็น:

    BASH / Shell

    php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider"
    
  3. ตั้งค่า Database (.env):
    แก้ไขไฟล์ .env เพื่อให้ชี้ไปยัง PostgreSQL ของคุณ:

    Plain Text

    DB_CONNECTION=pgsql\nDB_HOST=127.0.0.1\nDB_PORT=5432\nDB_DATABASE=your_database_name\nDB_USERNAME=your_user\nDB_PASSWORD=your_password
    
  4. รัน Migration:
    รันคำสั่งเพื่อสร้างตารางทั้งหมด (รวมถึงตาราง roles, permissions, และ model_has_roles):

    BASH / Shell

    php artisan migrate
    

🧑‍💻 การผสาน HasRoles เข้ากับ User Model

ขั้นตอนสำคัญคือการอัปเดต Model app/Models/User.php เพื่อให้ User Model มีความสามารถในการรับบทบาท (Roles) และสิทธิ์ (Permissions) ผ่าน Trait ของ Spatie:

PHP

<?php

namespace App\Models;

use Illuminate\Foundation\Auth\User as Authenticatable;
use Spatie\Permission\Traits\HasRoles; // เพิ่มบรรทัดนี้

class User extends Authenticatable
{
    use HasRoles; // เพิ่มบรรทัดนี้
    // ... ส่วนอื่นๆ ของ Model
}

🚀 การใช้งานและตัวอย่างการจัดการสิทธิ์ (PostgreSQL Context)

เมื่อติดตั้งเสร็จแล้ว คุณสามารถใช้ Facade ของ Spatie ใน Controller หรือ Service Layer เพื่อจัดการสิทธิ์ได้ ตัวอย่างเช่น การสร้าง Role และการกำหนดสิทธิ์ให้ผู้ใช้:

PHP

// 1. สร้าง Role และ Permission
use Spatie\Permission\Models\Role;
use Spatie\Permission\Models\Permission;

Role::create(['name' => 'admin']);
Permission::create(['name' => 'create articles']);

// 2. กำหนดสิทธิ์ให้ Role
$adminRole = Role::firstOrCreate(['name' => 'admin']);
$adminRole->givePermissionTo('create articles');

// 3. กำหนด Role ให้ User
$user = App\Models\User::find(1);
$user->assignRole('admin');

ในเบื้องหลังของ PostgreSQL, การดำเนินการเหล่านี้จะถูกจัดการอย่างมีประสิทธิภาพ โดยมีการเชื่อมโยงข้อมูลผ่าน Foreign Keys ในตารางต่างๆ ทำให้ระบบมีความสมบูรณ์และป้องกันการเข้าถึงข้อมูลโดยไม่ได้รับอนุญาตได้อย่างแท้จริง

✅ บทสรุป

การใช้ Spatie Laravel-Permission ร่วมกับ Jetstream และฐานข้อมูล PostgreSQL ไม่เพียงแต่ช่วยลดภาระการเขียนโค้ดด้านความปลอดภัยที่ซ้ำซ้อนเท่านั้น แต่ยังมอบสถาปัตยกรรมที่แข็งแกร่งและยืดหยุ่นสำหรับการขยายระบบในอนาคต ไม่ว่าคุณจะต้องการระบบจัดการสิทธิ์ที่ซับซ้อนระดับองค์กร หรือเพียงแค่การจำกัดการเข้าถึงฟีเจอร์บางอย่าง Spatie คือคำตอบที่สมบูรณ์แบบสำหรับนักพัฒนา Laravel ทุกคน

Exit mobile version