feat: Implement admin role and permission management, employee management APIs, and user profile extensions.
This commit is contained in:
+99
-74
@@ -2,6 +2,8 @@
|
||||
|
||||
use App\Http\Controllers\Api\Admin\Auth\AuthController;
|
||||
use App\Http\Controllers\Api\Admin\Customer\CustomerController;
|
||||
use App\Http\Controllers\Api\Admin\Employee\EmployeeController;
|
||||
use App\Http\Controllers\Api\Admin\Role\RolePermissionController;
|
||||
use App\Http\Controllers\Api\Admin\Invoice\InvoiceController;
|
||||
use App\Http\Controllers\Api\Admin\Order\OrderController;
|
||||
use App\Http\Controllers\Api\Admin\Payment\PaymentController;
|
||||
@@ -38,105 +40,128 @@ Route::prefix('v1')
|
||||
Route::post('refresh', [AuthController::class, 'refresh']);
|
||||
Route::get('me', [AuthController::class, 'me']);
|
||||
|
||||
// Customers
|
||||
// Role Permissions
|
||||
Route::prefix('role-permissions')->group(function () {
|
||||
// Accessible bởi mọi admin — trả về permissions hiệu lực của user hiện tại
|
||||
Route::get('mine', [RolePermissionController::class, 'mine']);
|
||||
// Các endpoint sau chỉ dành cho Full Administrator (kiểm tra trong controller)
|
||||
Route::get('/', [RolePermissionController::class, 'index']);
|
||||
Route::get('all-permissions', [RolePermissionController::class, 'allPermissions']);
|
||||
Route::post('permissions', [RolePermissionController::class, 'createPermissionGroup']);
|
||||
Route::delete('permissions/group/{module}', [RolePermissionController::class, 'deletePermissionGroup']);
|
||||
Route::patch('permissions/{id}', [RolePermissionController::class, 'renamePermission']);
|
||||
Route::put('{roleId}', [RolePermissionController::class, 'update']);
|
||||
});
|
||||
|
||||
// Employees (module: administrator)
|
||||
Route::prefix('employees')->group(function () {
|
||||
Route::get('roles', [EmployeeController::class, 'roles'])->middleware('perm:administrator.view');
|
||||
Route::get('/', [EmployeeController::class, 'index'])->middleware('perm:administrator.view');
|
||||
Route::post('/', [EmployeeController::class, 'store'])->middleware('perm:administrator.create');
|
||||
Route::get('{id}', [EmployeeController::class, 'show'])->middleware('perm:administrator.view');
|
||||
Route::put('{id}', [EmployeeController::class, 'update'])->middleware('perm:administrator.edit');
|
||||
Route::delete('{id}', [EmployeeController::class, 'destroy'])->middleware('perm:administrator.destroy');
|
||||
});
|
||||
|
||||
// Customers (module: customer)
|
||||
Route::prefix('customers')->group(function () {
|
||||
Route::get('/', [CustomerController::class, 'index']);
|
||||
Route::get('/datatable', [CustomerController::class, 'datatable']);
|
||||
Route::post('/', [CustomerController::class, 'store']);
|
||||
Route::get('{id}', [CustomerController::class, 'show']);
|
||||
Route::put('{id}', [CustomerController::class, 'update']);
|
||||
Route::delete('{id}', [CustomerController::class, 'destroy']);
|
||||
Route::post('{id}/reset-password', [CustomerController::class, 'resetPassword']);
|
||||
Route::post('{id}/add-credit', [CustomerController::class, 'addCredit']);
|
||||
Route::get('{id}/products', [CustomerController::class, 'getProducts']);
|
||||
Route::get('{id}/invoices', [CustomerController::class, 'getInvoices']);
|
||||
Route::get('{id}/transactions', [CustomerController::class, 'getTransactions']);
|
||||
Route::get('{id}/domains', [CustomerController::class, 'getDomains']);
|
||||
Route::get('trash', [CustomerController::class, 'trash']);
|
||||
Route::post('{id}/restore', [CustomerController::class, 'restore']);
|
||||
Route::delete('{id}/force', [CustomerController::class, 'forceDelete']);
|
||||
Route::get('trash', [CustomerController::class, 'trash'])->middleware('perm:customer.view');
|
||||
Route::get('/', [CustomerController::class, 'index'])->middleware('perm:customer.view');
|
||||
Route::get('/datatable', [CustomerController::class, 'datatable'])->middleware('perm:customer.view');
|
||||
Route::post('/', [CustomerController::class, 'store'])->middleware('perm:customer.create');
|
||||
Route::get('{id}', [CustomerController::class, 'show'])->middleware('perm:customer.view');
|
||||
Route::put('{id}', [CustomerController::class, 'update'])->middleware('perm:customer.edit');
|
||||
Route::delete('{id}', [CustomerController::class, 'destroy'])->middleware('perm:customer.destroy');
|
||||
Route::post('{id}/reset-password', [CustomerController::class, 'resetPassword'])->middleware('perm:customer.edit');
|
||||
Route::post('{id}/add-credit', [CustomerController::class, 'addCredit'])->middleware('perm:customer.edit');
|
||||
Route::get('{id}/products', [CustomerController::class, 'getProducts'])->middleware('perm:customer.view');
|
||||
Route::get('{id}/invoices', [CustomerController::class, 'getInvoices'])->middleware('perm:customer.view');
|
||||
Route::get('{id}/transactions', [CustomerController::class, 'getTransactions'])->middleware('perm:customer.view');
|
||||
Route::get('{id}/domains', [CustomerController::class, 'getDomains'])->middleware('perm:customer.view');
|
||||
Route::post('{id}/restore', [CustomerController::class, 'restore'])->middleware('perm:customer.edit');
|
||||
Route::delete('{id}/force', [CustomerController::class, 'forceDelete'])->middleware('perm:customer.destroy');
|
||||
});
|
||||
|
||||
// Products
|
||||
// Products (module: product-service)
|
||||
Route::prefix('products')->group(function () {
|
||||
Route::get('/', [ProductController::class, 'index']);
|
||||
Route::post('/', [ProductController::class, 'store']);
|
||||
Route::get('{id}', [ProductController::class, 'show']);
|
||||
Route::put('{id}', [ProductController::class, 'update']);
|
||||
Route::delete('{id}', [ProductController::class, 'destroy']);
|
||||
Route::post('{id}/duplicate', [ProductController::class, 'duplicate']);
|
||||
Route::post('import', [ProductController::class, 'import']);
|
||||
Route::get('export', [ProductController::class, 'export']);
|
||||
Route::get('export', [ProductController::class, 'export'])->middleware('perm:product-service.manager');
|
||||
Route::get('/', [ProductController::class, 'index'])->middleware('perm:product-service.view');
|
||||
Route::post('/', [ProductController::class, 'store'])->middleware('perm:product-service.create');
|
||||
Route::post('import', [ProductController::class, 'import'])->middleware('perm:product-service.create');
|
||||
Route::get('{id}', [ProductController::class, 'show'])->middleware('perm:product-service.view');
|
||||
Route::put('{id}', [ProductController::class, 'update'])->middleware('perm:product-service.edit');
|
||||
Route::delete('{id}', [ProductController::class, 'destroy'])->middleware('perm:product-service.destroy');
|
||||
Route::post('{id}/duplicate', [ProductController::class, 'duplicate'])->middleware('perm:product-service.create');
|
||||
});
|
||||
|
||||
// Product Categories (Groups)
|
||||
// Product Categories / Groups (module: product-service)
|
||||
Route::prefix('product-categories')->group(function () {
|
||||
Route::get('/', [ProductCategoryController::class, 'index']);
|
||||
Route::post('/', [ProductCategoryController::class, 'store']);
|
||||
Route::get('{id}', [ProductCategoryController::class, 'show']);
|
||||
Route::put('{id}', [ProductCategoryController::class, 'update']);
|
||||
Route::delete('{id}', [ProductCategoryController::class, 'destroy']);
|
||||
Route::get('/', [ProductCategoryController::class, 'index'])->middleware('perm:product-service.view');
|
||||
Route::post('/', [ProductCategoryController::class, 'store'])->middleware('perm:product-service.create');
|
||||
Route::get('{id}', [ProductCategoryController::class, 'show'])->middleware('perm:product-service.view');
|
||||
Route::put('{id}', [ProductCategoryController::class, 'update'])->middleware('perm:product-service.edit');
|
||||
Route::delete('{id}', [ProductCategoryController::class, 'destroy'])->middleware('perm:product-service.destroy');
|
||||
});
|
||||
|
||||
// Orders
|
||||
// Orders (module: order)
|
||||
Route::prefix('orders')->group(function () {
|
||||
Route::get('/', [OrderController::class, 'index']);
|
||||
Route::get('/datatable', [OrderController::class, 'datatable']);
|
||||
Route::post('/', [OrderController::class, 'store']);
|
||||
Route::get('{id}', [OrderController::class, 'show']);
|
||||
Route::put('{id}', [OrderController::class, 'update']);
|
||||
Route::delete('{id}', [OrderController::class, 'destroy']);
|
||||
Route::post('{id}/accept', [OrderController::class, 'accept']);
|
||||
Route::post('{id}/cancel', [OrderController::class, 'cancel']);
|
||||
Route::get('/', [OrderController::class, 'index'])->middleware('perm:order.view');
|
||||
Route::get('/datatable', [OrderController::class, 'datatable'])->middleware('perm:order.view');
|
||||
Route::post('/', [OrderController::class, 'store'])->middleware('perm:order.create');
|
||||
Route::get('{id}', [OrderController::class, 'show'])->middleware('perm:order.view');
|
||||
Route::put('{id}', [OrderController::class, 'update'])->middleware('perm:order.edit');
|
||||
Route::delete('{id}', [OrderController::class, 'destroy'])->middleware('perm:order.destroy');
|
||||
Route::post('{id}/accept', [OrderController::class, 'accept'])->middleware('perm:order.edit');
|
||||
Route::post('{id}/cancel', [OrderController::class, 'cancel'])->middleware('perm:order.edit');
|
||||
});
|
||||
|
||||
// Invoices
|
||||
// Invoices (module: invoice)
|
||||
Route::prefix('invoices')->group(function () {
|
||||
Route::get('/', [InvoiceController::class, 'index']);
|
||||
Route::get('/datatable', [InvoiceController::class, 'datatable']);
|
||||
Route::post('/', [InvoiceController::class, 'store']);
|
||||
Route::get('{id}', [InvoiceController::class, 'show']);
|
||||
Route::put('{id}', [InvoiceController::class, 'update']);
|
||||
Route::delete('{id}', [InvoiceController::class, 'destroy']);
|
||||
Route::post('{id}/paid', [InvoiceController::class, 'markAsPaid']);
|
||||
Route::post('{id}/cancel', [InvoiceController::class, 'cancel']);
|
||||
Route::get('/', [InvoiceController::class, 'index'])->middleware('perm:invoice.view');
|
||||
Route::get('/datatable', [InvoiceController::class, 'datatable'])->middleware('perm:invoice.view');
|
||||
Route::post('/', [InvoiceController::class, 'store'])->middleware('perm:invoice.create');
|
||||
Route::get('{id}', [InvoiceController::class, 'show'])->middleware('perm:invoice.view');
|
||||
Route::put('{id}', [InvoiceController::class, 'update'])->middleware('perm:invoice.edit');
|
||||
Route::delete('{id}', [InvoiceController::class, 'destroy'])->middleware('perm:invoice.destroy');
|
||||
Route::post('{id}/paid', [InvoiceController::class, 'markAsPaid'])->middleware('perm:invoice.edit');
|
||||
Route::post('{id}/cancel', [InvoiceController::class, 'cancel'])->middleware('perm:invoice.edit');
|
||||
});
|
||||
|
||||
// Payments
|
||||
// Payments (module: payment)
|
||||
Route::prefix('payments')->group(function () {
|
||||
Route::get('/', [PaymentController::class, 'index']);
|
||||
Route::post('/', [PaymentController::class, 'store']);
|
||||
Route::get('{id}', [PaymentController::class, 'show']);
|
||||
Route::put('{id}', [PaymentController::class, 'update']);
|
||||
Route::delete('{id}', [PaymentController::class, 'destroy']);
|
||||
Route::get('/', [PaymentController::class, 'index'])->middleware('perm:payment.view');
|
||||
Route::post('/', [PaymentController::class, 'store'])->middleware('perm:payment.create');
|
||||
Route::get('{id}', [PaymentController::class, 'show'])->middleware('perm:payment.view');
|
||||
Route::put('{id}', [PaymentController::class, 'update'])->middleware('perm:payment.edit');
|
||||
Route::delete('{id}', [PaymentController::class, 'destroy'])->middleware('perm:payment.destroy');
|
||||
});
|
||||
|
||||
// VPS
|
||||
// VPS (module: module-vcenter)
|
||||
Route::prefix('vps')->group(function () {
|
||||
Route::get('/', [VPSController::class, 'index']);
|
||||
Route::get('{id}', [VPSController::class, 'show']);
|
||||
Route::put('{id}', [VPSController::class, 'update']);
|
||||
Route::post('{id}/power-on', [VPSController::class, 'powerOn']);
|
||||
Route::post('{id}/power-off', [VPSController::class, 'powerOff']);
|
||||
Route::post('{id}/restart', [VPSController::class, 'restart']);
|
||||
Route::get('{id}/console-ticket', [VPSController::class, 'getConsoleTicket']);
|
||||
Route::get('/', [VPSController::class, 'index'])->middleware('perm:module-vcenter.view');
|
||||
Route::get('{id}', [VPSController::class, 'show'])->middleware('perm:module-vcenter.view');
|
||||
Route::put('{id}', [VPSController::class, 'update'])->middleware('perm:module-vcenter.edit');
|
||||
Route::post('{id}/power-on', [VPSController::class, 'powerOn'])->middleware('perm:module-vcenter.edit');
|
||||
Route::post('{id}/power-off', [VPSController::class, 'powerOff'])->middleware('perm:module-vcenter.edit');
|
||||
Route::post('{id}/restart', [VPSController::class, 'restart'])->middleware('perm:module-vcenter.edit');
|
||||
Route::get('{id}/console-ticket', [VPSController::class, 'getConsoleTicket'])->middleware('perm:module-vcenter.view');
|
||||
});
|
||||
|
||||
// vCenter
|
||||
// vCenter (module: module-vcenter)
|
||||
Route::prefix('vcenter')->group(function () {
|
||||
Route::get('tree', [VCenterController::class, 'tree']);
|
||||
Route::get('console-ticket', [VCenterController::class, 'consoleTicket']);
|
||||
Route::post('/', [VCenterController::class, 'store']);
|
||||
Route::post('sync', [VCenterController::class, 'sync']);
|
||||
Route::put('node/{type}/{id}', [VCenterController::class, 'updateNode']);
|
||||
Route::delete('node/{type}/{id}', [VCenterController::class, 'destroyNode']);
|
||||
Route::get('tree', [VCenterController::class, 'tree'])->middleware('perm:module-vcenter.view');
|
||||
Route::get('console-ticket', [VCenterController::class, 'consoleTicket'])->middleware('perm:module-vcenter.view');
|
||||
Route::post('/', [VCenterController::class, 'store'])->middleware('perm:module-vcenter.create');
|
||||
Route::post('sync', [VCenterController::class, 'sync'])->middleware('perm:module-vcenter.edit');
|
||||
Route::put('node/{type}/{id}', [VCenterController::class, 'updateNode'])->middleware('perm:module-vcenter.edit');
|
||||
Route::delete('node/{type}/{id}', [VCenterController::class, 'destroyNode'])->middleware('perm:module-vcenter.destroy');
|
||||
});
|
||||
|
||||
// vCenter Manager Power Operations
|
||||
// vCenter Manager Power Operations (module: module-vcenter)
|
||||
Route::prefix('vcenter-manager')->group(function () {
|
||||
Route::post('vm/power-on', [App\Http\Controllers\admin\VCenterManagerController::class, 'powerOn']);
|
||||
Route::post('vm/power-off', [App\Http\Controllers\admin\VCenterManagerController::class, 'powerOff']);
|
||||
Route::get('vms/powered-off', [App\Http\Controllers\admin\VCenterManagerController::class, 'getPoweredOffVms']);
|
||||
Route::post('vm/power-on', [App\Http\Controllers\admin\VCenterManagerController::class, 'powerOn'])->middleware('perm:module-vcenter.edit');
|
||||
Route::post('vm/power-off', [App\Http\Controllers\admin\VCenterManagerController::class, 'powerOff'])->middleware('perm:module-vcenter.edit');
|
||||
Route::get('vms/powered-off', [App\Http\Controllers\admin\VCenterManagerController::class, 'getPoweredOffVms'])->middleware('perm:module-vcenter.view');
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user