feat: Implement admin role and permission management, employee management APIs, and user profile extensions.
This commit is contained in:
@@ -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']);
|
||||
});
|
||||
}
|
||||
};
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
@@ -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',
|
||||
]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user