ป้ายกำกับ: Laravel-Permission

Spring Security: RBAC (Laravel Style )Spring Security: RBAC (Laravel Style )

เหมือนเป็นทางเลือกแปลก ๆ แต่จากที่เคยใช้มาใน Laravel Jetstream, Laravel-Permission มันเป็นอะไรที่ครบ มีความยืดหยุ่นสูง (Role-Based Access Control: RBAC) และรองรับฟีเจอร์สมัยใหม่ได้ครบถ้วนและสมบูรณ์ในตัวเองอยู่แล้ว เลยอยากจะใช้โครงสร้างตารางเดียวกัน แทนที่จะมาออกแบบใหม่ตั้งแต่ต้น


โครงสร้างตาราง (Database Schema)

ตาราง (Table) หน้าที่
usersเก็บข้อมูลหลัก (id, username, password, email, profile_photo_path)
rolesเก็บชื่อสิทธิ์หลัก (เช่น admin, editor, user)
permissionsเก็บสิทธิ์ย่อย (เช่น edit-post, delete-user)
model_has_rolesเชื่อม User กับ Role (Pivot Table)
role_has_permissionsเชื่อม Role กับ Permission (Pivot Table)

สร้างไฟล์ SQL

src/main/resources/db/migration/V1__create_auth_tables.sql

-- 1. Table Users (Jetstream Style) CREATE TABLE users (id BIGINT IDENTITY (1,1) PRIMARY KEY, username NVARCHAR (255) NOT NULL UNIQUE, password NVARCHAR (255) NOT NULL, email NVARCHAR (255) UNIQUE, full_name NVARCHAR (255) , -- รองรับภาษาไทย Thai_100_CI_AS profile_photo_path NVARCHAR (2048) , created_at DATETIME2 DEFAULT GETDATE () , updated_at DATETIME2) ; -- 2. Table Roles (Spatie Style) CREATE TABLE roles (id BIGINT IDENTITY (1,1) PRIMARY KEY, name NVARCHAR (100) NOT NULL UNIQUE, -- เช่น ROLE_ADMIN guard_name NVARCHAR (50) DEFAULT 'web') ; -- 3. Table Permissions
CREATE TABLE permissions (id BIGINT IDENTITY (1,1) PRIMARY KEY, name NVARCHAR (100) NOT NULL UNIQUE, -- เช่น user-create guard_name NVARCHAR (50) DEFAULT 'web') ; -- 4. User Has Roles (Pivot) CREATE TABLE model_has_roles (role_id BIGINT NOT NULL, model_id BIGINT NOT NULL, -- user id PRIMARY KEY (role_id, model_id) , CONSTRAINT fk_role FOREIGN KEY (role_id) REFERENCES roles (id) ON DELETE CASCADE, CONSTRAINT fk_user_role FOREIGN KEY (model_id) REFERENCES users (id) ON DELETE CASCADE) ; -- 5. Role Has Permissions (Pivot) CREATE TABLE role_has_permissions (permission_id BIGINT NOT NULL, role_id BIGINT NOT NULL, PRIMARY KEY (permission_id, role_id) , CONSTRAINT fk_perm FOREIGN KEY (permission_id) REFERENCES permissions (id) ON DELETE CASCADE, CONSTRAINT fk_role_perm FOREIGN KEY (role_id) REFERENCES roles (id) ON DELETE CASCADE) ;

อ่านเพิ่มเติม