feat: Implement admin role and permission management, employee management APIs, and user profile extensions.

This commit is contained in:
pbao9
2026-03-10 11:43:19 +07:00
parent a70900f542
commit cf0f2cf686
14 changed files with 924 additions and 187 deletions
@@ -0,0 +1,24 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
public function up(): void
{
Schema::table('user', function (Blueprint $table) {
$table->date('birthday')->nullable()->after('email');
$table->string('address')->nullable()->after('birthday');
$table->string('phone', 20)->nullable()->after('address');
});
}
public function down(): void
{
Schema::table('user', function (Blueprint $table) {
$table->dropColumn(['birthday', 'address', 'phone']);
});
}
};
+94
View File
@@ -0,0 +1,94 @@
<?php
namespace Database\Seeders;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
use Spatie\Permission\Models\Permission;
use Spatie\Permission\Models\Role;
/**
* Sửa guard_name từ 'admins' → 'admin' cho tất cả roles & permissions.
* Chạy 1 lần: php artisan db:seed --class=FixRoleGuardSeeder
*/
class FixRoleGuardSeeder extends Seeder
{
public function run(): void
{
app()[\Spatie\Permission\PermissionRegistrar::class]->forgetCachedPermissions();
// Cập nhật permissions
DB::table('permissions')
->where('guard_name', 'admins')
->update(['guard_name' => 'admin']);
// Cập nhật roles
DB::table('roles')
->where('guard_name', 'admins')
->update(['guard_name' => 'admin']);
$this->command->info('✅ Đã cập nhật guard_name: admins → admin cho ' .
Role::where('guard_name', 'admin')->count() . ' roles, ' .
Permission::where('guard_name', 'admin')->count() . ' permissions.');
// Đảm bảo 6 roles tồn tại với guard admin
$roles = [
'Full Administrator',
'Administrator',
'Sale',
'IT',
'Customer Service',
'Marketing',
];
foreach ($roles as $name) {
Role::firstOrCreate([
'name' => $name,
'guard_name' => 'admin',
]);
}
// Full Administrator luôn có tất cả permissions
$fullAdmin = Role::where('name', 'Full Administrator')
->where('guard_name', 'admin')
->first();
if ($fullAdmin) {
$fullAdmin->syncPermissions(
Permission::where('guard_name', 'admin')->get()
);
$this->command->info('✅ Full Administrator đã được cấp tất cả quyền.');
}
// Administrator được cấp một số quyền cơ bản
$admin = Role::where('name', 'Administrator')
->where('guard_name', 'admin')
->first();
if ($admin) {
$adminPermissions = [
'customer.view',
'customer.create',
'customer.edit',
'customer.manager',
'product-service.view',
'product-service.create',
'product-service.edit',
'product-service.manager',
'order.view',
'order.create',
'order.edit',
'order.manager',
'administrator.view',
'administrator.manager',
];
$perms = Permission::whereIn('name', $adminPermissions)
->where('guard_name', 'admin')
->get();
$admin->syncPermissions($perms);
$this->command->info('✅ Administrator đã được cấp quyền: ' . implode(', ', $adminPermissions));
}
app()[\Spatie\Permission\PermissionRegistrar::class]->forgetCachedPermissions();
}
}
+16 -11
View File
@@ -2,22 +2,27 @@
namespace Database\Seeders;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
use Spatie\Permission\Models\Role;
class RoleSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
public function run(): void
{
Role::create([
'name' => 'Full Administrator',
'guard_name' => 'admins'
]);
$roles = [
'Full Administrator',
'Administrator',
'Sale',
'IT',
'Customer Service',
'Marketing',
];
foreach ($roles as $name) {
Role::firstOrCreate([
'name' => $name,
'guard_name' => 'admin',
]);
}
}
}
+124 -101
View File
@@ -2,135 +2,158 @@
namespace Database\Seeders;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
use Spatie\Permission\Models\Permission;
use Spatie\Permission\Models\Role;
class RolesAndPermissions extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
public function run(): void
{
// Reset cached roles and permissions
app()[\Spatie\Permission\PermissionRegistrar::class]->forgetCachedPermissions();
// create client permissions
Permission::create(['name' => 'manager customer']);
Permission::create(['name' => 'add customer']);
Permission::create(['name' => 'edit customer']);
Permission::create(['name' => 'delete customer']);
$permissions = [
// Khách hàng
'customer.view',
'customer.create',
'customer.edit',
'customer.destroy',
'customer.manager',
// create admin permissions
Permission::create(['name' => 'manager administrator']);
Permission::create(['name' => 'add administrator']);
Permission::create(['name' => 'edit administrator']);
Permission::create(['name' => 'delete administrator']);
// Nhân sự
'administrator.view',
'administrator.create',
'administrator.edit',
'administrator.destroy',
'administrator.manager',
// create product permissions
Permission::create(['name' => 'manager product']);
Permission::create(['name' => 'add product']);
Permission::create(['name' => 'edit product']);
Permission::create(['name' => 'delete product']);
// Sản phẩm / Dịch vụ
'product-service.view',
'product-service.create',
'product-service.edit',
'product-service.destroy',
'product-service.manager',
// create order permissions
Permission::create(['name' => 'manager order']);
Permission::create(['name' => 'add order']);
Permission::create(['name' => 'edit order']);
Permission::create(['name' => 'delete order']);
// Đơn hàng
'order.view',
'order.create',
'order.edit',
'order.destroy',
'order.manager',
// create invoice permissions
Permission::create(['name' => 'manager invoice']);
Permission::create(['name' => 'add invoice']);
Permission::create(['name' => 'edit invoice']);
Permission::create(['name' => 'delete invoice']);
// Hóa đơn
'invoice.view',
'invoice.create',
'invoice.edit',
'invoice.destroy',
'invoice.manager',
// Create Coupon Permissions
Permission::create(['name' => 'manager coupon']);
Permission::create(['name' => 'add coupon']);
Permission::create(['name' => 'edit coupon']);
Permission::create(['name' => 'delete coupon']);
// Mã giảm giá
'coupon.view',
'coupon.create',
'coupon.edit',
'coupon.destroy',
'coupon.manager',
// Create post Permissions
Permission::create(['name' => 'manager post']);
Permission::create(['name' => 'add post']);
Permission::create(['name' => 'edit post']);
Permission::create(['name' => 'delete post']);
// Bài viết
'post.view',
'post.create',
'post.edit',
'post.destroy',
'post.manager',
// Create support Permissions
Permission::create(['name' => 'manager support']);
Permission::create(['name' => 'add support']);
Permission::create(['name' => 'edit support']);
Permission::create(['name' => 'delete support']);
// Hỗ trợ
'support.view',
'support.create',
'support.edit',
'support.destroy',
'support.manager',
// Create Payment Permissions
Permission::create(['name' => 'manager payment']);
Permission::create(['name' => 'add payment']);
Permission::create(['name' => 'edit payment']);
Permission::create(['name' => 'delete payment']);
// Thanh toán
'payment.view',
'payment.create',
'payment.edit',
'payment.destroy',
'payment.manager',
// create module dns permissions
Permission::create(['name' => 'manager module dns']);
Permission::create(['name' => 'add module dns']);
Permission::create(['name' => 'edit module dns']);
Permission::create(['name' => 'delete module dns']);
// Module DNS
'module-dns.view',
'module-dns.create',
'module-dns.edit',
'module-dns.destroy',
'module-dns.manager',
// create module hosting permissions
Permission::create(['name' => 'manager module hosting']);
Permission::create(['name' => 'add module hosting']);
Permission::create(['name' => 'edit module hosting']);
Permission::create(['name' => 'delete module hosting']);
// Module Hosting
'module-hosting.view',
'module-hosting.create',
'module-hosting.edit',
'module-hosting.destroy',
'module-hosting.manager',
// create module vcenter permissions
Permission::create(['name' => 'manager module vcenter']);
Permission::create(['name' => 'add module vcenter']);
Permission::create(['name' => 'edit module vcenter']);
Permission::create(['name' => 'delete module vcenter']);
// Module vCenter
'module-vcenter.view',
'module-vcenter.create',
'module-vcenter.edit',
'module-vcenter.destroy',
'module-vcenter.manager',
// create module ippool permissions
Permission::create(['name' => 'manager module ippool']);
Permission::create(['name' => 'add module ippool']);
Permission::create(['name' => 'edit module ippool']);
Permission::create(['name' => 'delete module ippool']);
// IP Pool
'module-ippool.view',
'module-ippool.create',
'module-ippool.edit',
'module-ippool.destroy',
'module-ippool.manager',
// create package permissions
Permission::create(['name' => 'manager package module']);
Permission::create(['name' => 'add package module']);
Permission::create(['name' => 'edit package module']);
Permission::create(['name' => 'delete package module']);
// Gói dịch vụ
'package-module.view',
'package-module.create',
'package-module.edit',
'package-module.destroy',
'package-module.manager',
// create email template permissions
Permission::create(['name' => 'manager email template']);
Permission::create(['name' => 'add email template']);
Permission::create(['name' => 'edit email template']);
Permission::create(['name' => 'delete email template']);
// Email Template
'email-template.view',
'email-template.create',
'email-template.edit',
'email-template.destroy',
'email-template.manager',
// create setting permissions
Permission::create(['name' => 'manager setting']);
Permission::create(['name' => 'manager smtp']);
Permission::create(['name' => 'manager auto banking']);
Permission::create(['name' => 'manager system log']);
// Cài đặt
'setting.manager',
'smtp.manager',
'auto-banking.manager',
'system-log.manager',
// create role permissions
Permission::create(['name' => 'manager role']);
Permission::create(['name' => 'add role']);
Permission::create(['name' => 'edit role']);
Permission::create(['name' => 'delete role']);
// Vai trò & Phân quyền
'role.view',
'role.create',
'role.edit',
'role.destroy',
'role.manager',
// Menu
'menu.view',
'menu.create',
'menu.edit',
'menu.destroy',
'menu.manager',
];
// Create Menu Permissions
Permission::create(['name' => 'manager menu']);
Permission::create(['name' => 'add menu']);
Permission::create(['name' => 'edit menu']);
Permission::create(['name' => 'delete menu']);
// this can be done as separate statements
$role = Role::find(1);
foreach ($permissions as $name) {
Permission::firstOrCreate([
'name' => $name,
'guard_name' => 'admin',
]);
}
$role->givePermissionTo(Permission::all());
// Full Administrator nhận tất cả quyền
$fullAdmin = Role::where('name', 'Full Administrator')
->where('guard_name', 'admin')
->first();
if ($fullAdmin) {
$fullAdmin->syncPermissions(Permission::where('guard_name', 'admin')->get());
}
}
}