From 9a0758a754a676899eb3d00275ccf6d051b9913b Mon Sep 17 00:00:00 2001 From: amirghasempoor Date: Tue, 12 Aug 2025 16:44:14 +0330 Subject: [PATCH] change from session to token --- app/Http/Controllers/AuthController.php | 33 ++-- app/Models/User.php | 5 +- bootstrap/app.php | 2 +- config/auth.php | 6 +- database/seeders/DatabaseSeeder.php | 8 +- database/seeders/PermissionSeeder.php | 6 +- database/seeders/RoleSeeder.php | 2 +- routes/api.php | 223 ++++++++++++++++++++++- routes/web.php | 230 +----------------------- 9 files changed, 253 insertions(+), 262 deletions(-) diff --git a/app/Http/Controllers/AuthController.php b/app/Http/Controllers/AuthController.php index c566d73..64fac6e 100644 --- a/app/Http/Controllers/AuthController.php +++ b/app/Http/Controllers/AuthController.php @@ -4,9 +4,10 @@ namespace App\Http\Controllers; use App\Http\Requests\Auth\LoginRequest; use App\Http\Traits\ApiResponse; +use App\Models\User; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; -use Illuminate\Support\Facades\Auth; +use Illuminate\Support\Facades\Hash; class AuthController extends Controller { @@ -14,33 +15,25 @@ class AuthController extends Controller public function login(LoginRequest $request): JsonResponse { - if ($this->attemptLogin($request)) + $user = User::query()->where('username', '=', $request->username)->first(); + + if (!Hash::check($request->password, $user->password)) { - $request->session()->regenerate(); - $this->updateUserInfo($request); - return $this->successResponse(); + return $this->errorResponse(__('messages.invalid_credentials')); } - return $this->errorResponse(__('messages.invalid_credentials')); - } + $token = $user->createToken("{$request->username}", ['*'], now()->addWeek())->plainTextToken; - protected function attemptLogin(Request $request): bool - { - return Auth::guard()->attempt($request->only('username', 'password')); - } - - protected function updateUserInfo(Request $request): void - { - Auth::user()->update([ - 'last_login' => now(), + return $this->successResponse([ + 'message' => __('messages.successful'), + 'token' => $token ]); } - public function logout(Request $request): JsonResponse + public function logout(): JsonResponse { - Auth::guard()->logout(); - $request->session()->invalidate(); - $request->session()->regenerateToken(); + auth()->user()->currentAccessToken()->delete(); + return $this->successResponse(); } } diff --git a/app/Models/User.php b/app/Models/User.php index f3f3154..f26e31c 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -7,16 +7,17 @@ use App\Facades\File\FileFacade; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; +use Laravel\Sanctum\HasApiTokens; use Spatie\Permission\Traits\HasRoles; class User extends Authenticatable { - use HasFactory, Notifiable, HasRoles; + use HasFactory, Notifiable, HasRoles, HasApiTokens; protected $guarded = []; protected $hidden = ['password', 'pivot']; - public string $guard_name = 'web'; + public string $guard_name = 'api'; public function storeFile($file, $name) { diff --git a/bootstrap/app.php b/bootstrap/app.php index 1e90ca2..5185425 100644 --- a/bootstrap/app.php +++ b/bootstrap/app.php @@ -10,7 +10,7 @@ return Application::configure(basePath: dirname(__DIR__)) api: __DIR__.'/../routes/api.php', commands: __DIR__.'/../routes/console.php', health: '/up', - apiPrefix: 'server/api', + apiPrefix: '/server', ) ->withMiddleware(function (Middleware $middleware) { $middleware->validateCsrfTokens(except: [ diff --git a/config/auth.php b/config/auth.php index 0ba5d5d..0344f08 100644 --- a/config/auth.php +++ b/config/auth.php @@ -14,7 +14,7 @@ return [ */ 'defaults' => [ - 'guard' => env('AUTH_GUARD', 'web'), + 'guard' => env('AUTH_GUARD', 'api'), 'passwords' => env('AUTH_PASSWORD_BROKER', 'users'), ], @@ -40,6 +40,10 @@ return [ 'driver' => 'session', 'provider' => 'users', ], + 'api' => [ + 'driver' => 'sanctum', + 'provider' => 'users', + ], ], /* diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index d01a0ef..6054b18 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -15,9 +15,9 @@ class DatabaseSeeder extends Seeder { // User::factory(10)->create(); - User::factory()->create([ - 'name' => 'Test User', - 'email' => 'test@example.com', - ]); +// User::factory()->create([ +// 'name' => 'Test User', +// 'email' => 'test@example.com', +// ]); } } diff --git a/database/seeders/PermissionSeeder.php b/database/seeders/PermissionSeeder.php index cb1ca2a..738fece 100644 --- a/database/seeders/PermissionSeeder.php +++ b/database/seeders/PermissionSeeder.php @@ -18,7 +18,7 @@ class PermissionSeeder extends Seeder 'id' => 1, 'name' => 'manage_users', 'name_fa' => 'مدیریت کاربران', - 'guard_name' => 'web', + 'guard_name' => 'api', 'created_at' => now(), 'updated_at' => now() ], @@ -26,7 +26,7 @@ class PermissionSeeder extends Seeder 'id' => 2, 'name' => 'manage_roles', 'name_fa' => 'مدیریت نقش ها', - 'guard_name' => 'web', + 'guard_name' => 'api', 'created_at' => now(), 'updated_at' => now() ], @@ -34,7 +34,7 @@ class PermissionSeeder extends Seeder 'id' => 3, 'name' => 'manage_calls', 'name_fa' => 'مدیریت تماس ها', - 'guard_name' => 'web', + 'guard_name' => 'api', 'created_at' => now(), 'updated_at' => now() ] diff --git a/database/seeders/RoleSeeder.php b/database/seeders/RoleSeeder.php index 8aea2e5..9c96d80 100644 --- a/database/seeders/RoleSeeder.php +++ b/database/seeders/RoleSeeder.php @@ -20,7 +20,7 @@ class RoleSeeder extends Seeder 'id' => 1, 'name' => 'super-admin', 'name_fa' => 'ادمین', - 'guard_name' => 'web', + 'guard_name' => 'api', 'created_at' => now(), 'updated_at' => now() ]); diff --git a/routes/api.php b/routes/api.php index 660dc9c..0c62851 100644 --- a/routes/api.php +++ b/routes/api.php @@ -1,15 +1,234 @@ post('/', [CallController::class, 'store'])->name('store'); -Route::prefix('operator') +Route::prefix('auth') + ->name('auth.') + ->controller(AuthController::class) + ->group(function () { + Route::post('/login', 'login')->name('login'); + Route::post('/logout', 'logout')->name('logout'); + }); + +Route::prefix('profile') + ->name('profile.') + ->middleware('auth') ->controller(ProfileController::class) ->group(function () { + Route::get('/info', 'info')->name('info'); + Route::post('/change_password', 'changePassword')->name('changePassword'); + Route::post('/change_avatar', 'changeAvatar')->name('changeAvatar'); + Route::get('/permissions', 'permissions')->name('permissions'); Route::get('/online', 'online')->name('online'); Route::get('/offline', 'offline')->name('offline'); }); + +Route::prefix('users') + ->name('users.') + ->middleware(['auth', 'permission:manage_users']) + ->controller(UserManagementController::class) + ->group(function () { + Route::get('/', 'index')->name('index'); + Route::get('/{user}', 'show')->middleware([SuperAdminCheck::class])->name('show'); + Route::post('/', 'store')->name('store'); + Route::post('/{user}', 'update')->middleware([SuperAdminCheck::class])->name('update'); + Route::delete('/{user}', 'destroy')->middleware([SuperAdminCheck::class])->name('destroy'); + }); + +Route::prefix('calls') + ->name('calls.') + ->controller(CallController::class) + ->group(function () { + Route::post('/', 'store')->name('store'); + Route::get('/list', 'list')->name('list')->middleware(['auth', 'permission:manage_calls']); + Route::post('/{call}', 'update')->name('update')->middleware(['auth', 'permission:manage_calls']); + }); + +Route::prefix('categories') + ->middleware('auth') + ->controller(CategoryController::class) + ->name('categories.') + ->group(function () { + Route::get('/list', 'list')->name('list'); + }); + +Route::middleware('auth') + ->prefix('permissions') + ->name('permissions.') + ->controller(PermissionManagementController::class) + ->group(function () { + Route::get('/', 'index')->name('index'); + Route::get('list', 'list')->name('list'); + Route::post('/', 'store')->name('store'); + Route::get('/{permission}', 'show')->name('show'); + Route::post('/{permission}', 'update')->name('update'); + Route::delete('/{permission}', 'destroy')->name('destroy'); + }); + +Route::prefix('provinces') + ->controller(ProvinceController::class) + ->name('provinces.') + ->group(function () { + Route::get('/list', 'list')->name('list'); + }); + +Route::middleware('auth') + ->prefix('roles') + ->name('roles.') + ->controller(RoleManagementController::class) + ->group(function () { + Route::get('/', 'index')->name('index'); + Route::get('list', 'list')->name('list'); + Route::post('/', 'store')->name('store'); + Route::get('/{role}', 'show')->name('show'); + Route::post('/{role}', 'update')->name('update'); + Route::delete('/{role}', 'destroy')->name('destroy'); + }); + +Route::middleware('auth') + ->prefix('cumulative_stats') + ->name('cumulativeStats.') + ->controller(CumulativeCentersStatsController::class) + ->group(function () { + Route::get('/', 'index')->name('index'); + }); + +Route::middleware('auth') + ->prefix('cumulative_voice_ratings') + ->name('cumulativeVoiceRatings.') + ->controller(CumulativeVoiceRatingStatsController::class) + ->group(function () { + Route::get('/', 'index')->name('index'); + }); + +Route::middleware('auth') + ->prefix('cumulative_keypress_stats') + ->name('cumulativeKeypressStats.') + ->controller(CumulativeKeypressStatsController::class) + ->group(function () { + Route::get('/', 'index')->name('index'); + }); + +Route::middleware('auth') + ->prefix('cumulative_message_ratings') + ->name('cumulativeMessageRatings.') + ->controller(CumulativeMessageRatingStatsController::class) + ->group(function () { + Route::get('/', 'index')->name('index'); + }); + +Route::middleware('auth') + ->prefix('dialogs') + ->name('dialogs.') + ->group(function () { + Route::prefix('operator') + ->name('operator.') + ->controller(\App\Http\Controllers\ProvinceDashboard\OperatorDialogues\OperatorController::class) + ->group(function () { + Route::get('/', 'index')->name('index'); + Route::get('/excel', 'excel')->name('excel'); + Route::get('/{operatorDialogue}','show')->name('show'); + }); + Route::prefix('supervisor') + ->name('supervisor.') + ->controller(\App\Http\Controllers\ProvinceDashboard\OperatorDialogues\SupervisorController::class) + ->group(function () { + Route::get('/', 'index')->name('index'); + Route::get('/excel', 'excel')->name('excel'); + Route::post('/rate/{operatorDialogue}', 'rate')->name('rate'); + Route::get('/{operatorDialogue}', 'show')->name('show'); + }); + }); + +Route::middleware('auth') + ->prefix('system_messages') + ->name('systemMessages.') + ->group(function () { + Route::prefix('operator') + ->name('systemMessages.') + ->controller(\App\Http\Controllers\ProvinceDashboard\SystemMessages\OperatorController::class) + ->group(function () { + Route::get('/', 'index')->name('index'); + Route::get('/excel', 'excel')->name('excel'); + Route::get('/{systemMessage}', 'show')->name('show'); + }); + + Route::prefix('supervisor') + ->name('systemMessages.') + ->controller(\App\Http\Controllers\ProvinceDashboard\SystemMessages\SupervisorController::class) + ->group(function () { + Route::get('/', 'index')->name('index'); + Route::get('/excel', 'excel')->name('excel'); + Route::get('/{systemMessage}', 'show')->name('show'); + Route::post('/{systemMessage}', 'rate')->name('rate'); + }); + }); + +Route::middleware('auth') + ->prefix('people_messages') + ->name('peopleMessages.') + ->group(function () { + Route::prefix('operator') + ->name('peopleMessages.') + ->controller(\App\Http\Controllers\ProvinceDashboard\PeopleMessages\OperatorController::class) + ->group(function () { + Route::get('/', 'index')->name('index'); + Route::get('/excel', 'excel')->name('excel'); + Route::post('/{peopleMessage}', 'handle')->name('handle'); + Route::get('/{peopleMessage}', 'show')->name('show'); + }); + + Route::prefix('supervisor') + ->name('peopleMessages.') + ->controller(\App\Http\Controllers\ProvinceDashboard\PeopleMessages\SupervisorController::class) + ->group(function () { + Route::get('/', 'index')->name('index'); + Route::get('/excel', 'excel')->name('excel'); + Route::get('/{peopleMessage}', 'show')->name('show'); + }); + }); + +Route::middleware(['auth', 'permission:teleport_to_province']) + ->prefix('login_to_province') + ->name('loginToProvince.') + ->controller(LoginToProvinceController::class) + ->group(function () { + Route::post('/', 'authenticate')->name('authenticate'); + }); + +Route::middleware(['auth', 'setadIp']) + ->prefix('verify_authentication') + ->name('verifyAuthentication.') + ->controller(VerifyAuthenticationController::class) + ->group(function () { + Route::post('/', 'login')->name('login'); + }); + +Route::middleware('auth') + ->prefix('report') + ->name('report.') + ->controller(ReportController::class) + ->group(function () { + Route::get('/cumulative', 'cumulative')->name('cumulative'); + Route::get('/people_messages', 'peopleMessages')->name('peopleMessages'); + Route::get('/detailed_logs', 'detailedLogs')->name('detailedLogs'); + Route::get('/operator_performance_daily', 'operatorPerformanceDaily')->name('operatorPerformanceDaily'); + Route::get('/operator_performance_total', 'operatorPerformanceTotal')->name('operatorPerformanceTotal'); + }); diff --git a/routes/web.php b/routes/web.php index a3b5c64..86a06c5 100644 --- a/routes/web.php +++ b/routes/web.php @@ -1,233 +1,7 @@ group(function () { - Route::prefix('auth') - ->name('auth.') - ->controller(AuthController::class) - ->group(function () { - Route::post('/login', 'login')->name('login'); - Route::post('/logout', 'logout')->name('logout'); - }); - - Route::prefix('profile') - ->name('profile.') - ->middleware('auth') - ->controller(ProfileController::class) - ->group(function () { - Route::get('/info', 'info')->name('info'); - Route::post('/change_password', 'changePassword')->name('changePassword'); - Route::post('/change_avatar', 'changeAvatar')->name('changeAvatar'); - Route::get('/permissions', 'permissions')->name('permissions'); - }); - - Route::prefix('users') - ->name('users.') - ->middleware(['auth', 'permission:manage_users']) - ->controller(UserManagementController::class) - ->group(function () { - Route::get('/', 'index')->name('index'); - Route::get('/{user}', 'show')->middleware([SuperAdminCheck::class])->name('show'); - Route::post('/', 'store')->name('store'); - Route::post('/{user}', 'update')->middleware([SuperAdminCheck::class])->name('update'); - Route::delete('/{user}', 'destroy')->middleware([SuperAdminCheck::class])->name('destroy'); - }); - - Route::prefix('calls') - ->name('calls.') - ->controller(CallController::class) - ->group(function () { - Route::post('/', 'store')->name('store'); - Route::get('/list', 'list')->name('list')->middleware(['auth', 'permission:manage_calls']); - Route::post('/{call}', 'update')->name('update')->middleware(['auth', 'permission:manage_calls']); - }); - - Route::prefix('categories') - ->middleware('auth') - ->controller(CategoryController::class) - ->name('categories.') - ->group(function () { - Route::get('/list', 'list')->name('list'); - }); - - Route::middleware('auth') - ->prefix('permissions') - ->name('permissions.') - ->controller(PermissionManagementController::class) - ->group(function () { - Route::get('/', 'index')->name('index'); - Route::get('list', 'list')->name('list'); - Route::post('/', 'store')->name('store'); - Route::get('/{permission}', 'show')->name('show'); - Route::post('/{permission}', 'update')->name('update'); - Route::delete('/{permission}', 'destroy')->name('destroy'); - }); - - Route::prefix('provinces') - ->controller(ProvinceController::class) - ->name('provinces.') - ->group(function () { - Route::get('/list', 'list')->name('list'); - }); - - Route::middleware('auth') - ->prefix('roles') - ->name('roles.') - ->controller(RoleManagementController::class) - ->group(function () { - Route::get('/', 'index')->name('index'); - Route::get('list', 'list')->name('list'); - Route::post('/', 'store')->name('store'); - Route::get('/{role}', 'show')->name('show'); - Route::post('/{role}', 'update')->name('update'); - Route::delete('/{role}', 'destroy')->name('destroy'); - }); - - Route::middleware('auth') - ->prefix('cumulative_stats') - ->name('cumulativeStats.') - ->controller(CumulativeCentersStatsController::class) - ->group(function () { - Route::get('/', 'index')->name('index'); - }); - - Route::middleware('auth') - ->prefix('cumulative_voice_ratings') - ->name('cumulativeVoiceRatings.') - ->controller(CumulativeVoiceRatingStatsController::class) - ->group(function () { - Route::get('/', 'index')->name('index'); - }); - - Route::middleware('auth') - ->prefix('cumulative_keypress_stats') - ->name('cumulativeKeypressStats.') - ->controller(CumulativeKeypressStatsController::class) - ->group(function () { - Route::get('/', 'index')->name('index'); - }); - - Route::middleware('auth') - ->prefix('cumulative_message_ratings') - ->name('cumulativeMessageRatings.') - ->controller(CumulativeMessageRatingStatsController::class) - ->group(function () { - Route::get('/', 'index')->name('index'); - }); - - Route::middleware('auth') - ->prefix('dialogs') - ->name('dialogs.') - ->group(function () { - Route::prefix('operator') - ->name('operator.') - ->controller(\App\Http\Controllers\ProvinceDashboard\OperatorDialogues\OperatorController::class) - ->group(function () { - Route::get('/', 'index')->name('index'); - Route::get('/excel', 'excel')->name('excel'); - Route::get('/{operatorDialogue}','show')->name('show'); - }); - Route::prefix('supervisor') - ->name('supervisor.') - ->controller(\App\Http\Controllers\ProvinceDashboard\OperatorDialogues\SupervisorController::class) - ->group(function () { - Route::get('/', 'index')->name('index'); - Route::get('/excel', 'excel')->name('excel'); - Route::post('/rate/{operatorDialogue}', 'rate')->name('rate'); - Route::get('/{operatorDialogue}', 'show')->name('show'); - }); - }); - - Route::middleware('auth') - ->prefix('system_messages') - ->name('systemMessages.') - ->group(function () { - Route::prefix('operator') - ->name('systemMessages.') - ->controller(\App\Http\Controllers\ProvinceDashboard\SystemMessages\OperatorController::class) - ->group(function () { - Route::get('/', 'index')->name('index'); - Route::get('/excel', 'excel')->name('excel'); - Route::get('/{systemMessage}', 'show')->name('show'); - }); - - Route::prefix('supervisor') - ->name('systemMessages.') - ->controller(\App\Http\Controllers\ProvinceDashboard\SystemMessages\SupervisorController::class) - ->group(function () { - Route::get('/', 'index')->name('index'); - Route::get('/excel', 'excel')->name('excel'); - Route::get('/{systemMessage}', 'show')->name('show'); - Route::post('/{systemMessage}', 'rate')->name('rate'); - }); - }); - - Route::middleware('auth') - ->prefix('people_messages') - ->name('peopleMessages.') - ->group(function () { - Route::prefix('operator') - ->name('peopleMessages.') - ->controller(\App\Http\Controllers\ProvinceDashboard\PeopleMessages\OperatorController::class) - ->group(function () { - Route::get('/', 'index')->name('index'); - Route::get('/excel', 'excel')->name('excel'); - Route::post('/{peopleMessage}', 'handle')->name('handle'); - Route::get('/{peopleMessage}', 'show')->name('show'); - }); - - Route::prefix('supervisor') - ->name('peopleMessages.') - ->controller(\App\Http\Controllers\ProvinceDashboard\PeopleMessages\SupervisorController::class) - ->group(function () { - Route::get('/', 'index')->name('index'); - Route::get('/excel', 'excel')->name('excel'); - Route::get('/{peopleMessage}', 'show')->name('show'); - }); - }); - - Route::middleware(['auth', 'permission:teleport_to_province']) - ->prefix('login_to_province') - ->name('loginToProvince.') - ->controller(LoginToProvinceController::class) - ->group(function () { - Route::post('/', 'authenticate')->name('authenticate'); - }); - - Route::middleware(['auth', 'setadIp']) - ->prefix('verify_authentication') - ->name('verifyAuthentication.') - ->controller(VerifyAuthenticationController::class) - ->group(function () { - Route::post('/', 'login')->name('login'); - }); - - Route::middleware('auth') - ->prefix('report') - ->name('report.') - ->controller(ReportController::class) - ->group(function () { - Route::get('/cumulative', 'cumulative')->name('cumulative'); - Route::get('/people_messages', 'peopleMessages')->name('peopleMessages'); - Route::get('/detailed_logs', 'detailedLogs')->name('detailedLogs'); - Route::get('/operator_performance_daily', 'operatorPerformanceDaily')->name('operatorPerformanceDaily'); - Route::get('/operator_performance_total', 'operatorPerformanceTotal')->name('operatorPerformanceTotal'); - }); +Route::get('/', function () { + return view('welcome'); });