fix : 테넌트 관리자 사용자 API 추가

- 사용자 목록
- 사용자 생성
- 사용자 단건 조회
- 사용자 수정
- 사용자 삭제(소프트 삭제)
- 활성/비활성 전환
- 삭제 복구
- 비밀번호 초기화

- 수정필요 : 역할부여, 역할 해재
This commit is contained in:
2025-08-15 16:32:11 +09:00
parent 9935bba84e
commit 06197a1366
7 changed files with 644 additions and 145 deletions

View File

@@ -12,6 +12,7 @@
use App\Http\Controllers\Api\V1\BomController;
use App\Http\Controllers\Api\V1\UserController;
use App\Http\Controllers\Api\V1\TenantController;
use App\Http\Controllers\Api\V1\AdminController;
// error test
Route::get('/test-error', function () {
@@ -48,6 +49,32 @@
});
// Tenant Admin API
Route::prefix('admin')->group(function () {
// 목록/생성
Route::get('users', [AdminController::class, 'index'])->name('v1.admin.users.index'); // 테넌트 사용자 목록 조회
Route::post('users', [AdminController::class, 'store'])->name('v1.admin.users.store'); // 테넌트 사용자 생성
// 단건
Route::get('users/{id}', [AdminController::class, 'show'])->name('v1.admin.users.show'); // 테넌트 사용자 단건 조회
Route::put('users/{id}', [AdminController::class, 'update'])->name('v1.admin.users.update'); // 테넌트 사용자 수정
// 소프트 삭제 복구
Route::delete('users/{id}', [AdminController::class, 'destroy'])->name('v1.admin.users.destroy'); // 테넌트 사용자 삭제(연결 삭제)
Route::post('users/{id}/restore', [AdminController::class, 'restore'])->name('v1.admin.users.restore'); // 테넌트 사용자 삭제 복구
// 상태 토글
Route::patch('users/{id}/status', [AdminController::class, 'toggle'])->name('v1.admin.users.status.toggle'); // 테넌트 사용자 활성/비활성
// 역할 부여/해제
Route::post('users/{id}/roles', [AdminController::class, 'attach'])->name('v1.admin.users.roles.attach'); // 테넌트 사용자 역할 부여
Route::delete('users/{id}/roles/{role}', [AdminController::class, 'detach'])->name('v1.admin.users.roles.detach'); // 테넌트 사용자 역할 해제
// 비밀번호 초기화
Route::post('users/{id}/reset-password', [AdminController::class, 'reset'])->name('v1.admin.users.password.reset'); // 테넌트 사용자 비밀번호 초기화
});
// Member API
Route::prefix('users')->group(function () {
Route::get('index', [UserController::class, 'index'])->name('v1.users.index'); // 회원 목록 조회
@@ -91,51 +118,6 @@
});
// ─────────────────────────────────────────────────────────────
// 공통 미들웨어 메모:
// - 'apikey' : X-API-KEY 검사 미들웨어 (커스텀)
// - 'auth:sanctum' : Bearer 토큰(Sanctum) 인증
// 필요 시 app/Http/Kernel.php 의 $routeMiddleware 에 별칭 등록
// ─────────────────────────────────────────────────────────────
/*
|--------------------------------------------------------------------------
| V1 - User 영역 (본인 계정)
|--------------------------------------------------------------------------
| Swagger: UserApi.php
| - POST /api/v1/auth/login
| - POST /api/v1/auth/logout
| - GET /api/v1/users/me
| - PUT /api/v1/users/me
| - PUT /api/v1/users/me/password
| - GET /api/v1/users/me/tenants
| - PATCH /api/v1/users/me/tenants/switch
*/
Route::prefix('v1_DEV')
->middleware(['apikey']) // 모든 엔드포인트는 X-API-KEY 필요
->group(function () {
// Auth (User)
Route::prefix('auth')->group(function () {
Route::post('login', [\App\Http\Controllers\Api\V1\AuthController::class, 'login'])
->name('v1.auth.login'); // Bearer 불필요(로그인)
Route::post('logout', [\App\Http\Controllers\Api\V1\AuthController::class, 'logout'])
->middleware('auth:sanctum')
->name('v1.auth.logout');
});
// Users (me)
Route::prefix('users')->middleware('auth:sanctum')->group(function () {
Route::get('me', [\App\Http\Controllers\Api\V1\User\MeController::class, 'show'])->name('v1.users.me.show');
Route::put('me', [\App\Http\Controllers\Api\V1\User\MeController::class, 'update'])->name('v1.users.me.update');
Route::put('me/password', [\App\Http\Controllers\Api\V1\User\MeController::class, 'changePassword'])->name('v1.users.me.password');
Route::get('me/tenants', [\App\Http\Controllers\Api\V1\User\TenantController::class, 'index'])->name('v1.users.me.tenants.index');
Route::patch('me/tenants/switch', [\App\Http\Controllers\Api\V1\User\TenantController::class, 'switch'])->name('v1.users.me.tenants.switch');
});
});
/*
|--------------------------------------------------------------------------
@@ -157,25 +139,5 @@
->middleware(['apikey', 'auth:sanctum', 'can:admin']) // 예: 'can:admin' 또는 커스텀 'is_admin'
->group(function () {
// 목록/생성
Route::get('users', [\App\Http\Controllers\Api\V1\Admin\UserController::class, 'index'])->name('v1.admin.users.index');
Route::post('users', [\App\Http\Controllers\Api\V1\Admin\UserController::class, 'store'])->name('v1.admin.users.store');
// 단건
Route::get('users/{id}', [\App\Http\Controllers\Api\V1\Admin\UserController::class, 'show'])->name('v1.admin.users.show');
Route::put('users/{id}', [\App\Http\Controllers\Api\V1\Admin\UserController::class, 'update'])->name('v1.admin.users.update');
Route::delete('users/{id}', [\App\Http\Controllers\Api\V1\Admin\UserController::class, 'destroy'])->name('v1.admin.users.destroy');
// 상태 토글
Route::patch('users/{id}/status', [\App\Http\Controllers\Api\V1\Admin\UserStatusController::class, 'toggle'])->name('v1.admin.users.status.toggle');
// 소프트 삭제 복구
Route::post('users/{id}/restore', [\App\Http\Controllers\Api\V1\Admin\UserRestoreController::class, 'restore'])->name('v1.admin.users.restore');
// 역할 부여/해제
Route::post('users/{id}/roles', [\App\Http\Controllers\Api\V1\Admin\UserRoleController::class, 'attach'])->name('v1.admin.users.roles.attach');
Route::delete('users/{id}/roles/{role}', [\App\Http\Controllers\Api\V1\Admin\UserRoleController::class, 'detach'])->name('v1.admin.users.roles.detach');
// 비밀번호 초기화
Route::post('users/{id}/reset-password', [\App\Http\Controllers\Api\V1\Admin\UserPasswordController::class, 'reset'])->name('v1.admin.users.password.reset');
});