change telephone id for every user

This commit is contained in:
2025-05-06 14:15:49 +03:30
parent ab042b3a44
commit 1a1a0aa57b
15 changed files with 64 additions and 40 deletions

View File

@@ -33,7 +33,7 @@ SESSION_ENCRYPT=false
SESSION_PATH=/ SESSION_PATH=/
SESSION_DOMAIN=null SESSION_DOMAIN=null
SESSION_SAME_SITE=none SESSION_SAME_SITE=none
SESSION_SECURE_COOKIE=false SESSION_SECURE_COOKIE=true
BROADCAST_CONNECTION=log BROADCAST_CONNECTION=log
FILESYSTEM_DISK=local FILESYSTEM_DISK=local

View File

@@ -17,10 +17,10 @@ RUN apk update && apk add --no-cache \
&& docker-php-ext-install pdo_pgsql && docker-php-ext-install pdo_pgsql
# Set the working directory # Set the working directory
WORKDIR /var/www/crm WORKDIR /var/www/laravel
COPY . . COPY . .
RUN chmod -R 777 /var/www/crm/storage /var/www/crm/bootstrap/cache RUN chmod -R 777 /var/www/laravel/storage /var/www/laravel/bootstrap/cache
# install composer # install composer

View File

@@ -5,8 +5,8 @@ namespace App\Http\Controllers\Admin;
use App\Facades\DataTable\DataTableFacade; use App\Facades\DataTable\DataTableFacade;
use App\Facades\File\FileFacade; use App\Facades\File\FileFacade;
use App\Http\Controllers\Controller; use App\Http\Controllers\Controller;
use App\Http\Requests\Admin\StoreRequest; use App\Http\Requests\Admin\UserManagement\StoreRequest;
use App\Http\Requests\Admin\UpdateRequest; use App\Http\Requests\Admin\UserManagement\UpdateRequest;
use App\Http\Resources\Admin\UserResource; use App\Http\Resources\Admin\UserResource;
use App\Http\Traits\ApiResponse; use App\Http\Traits\ApiResponse;
use App\Models\Province; use App\Models\Province;
@@ -22,7 +22,6 @@ class UserManagementController extends Controller
public function index(Request $request): JsonResponse public function index(Request $request): JsonResponse
{ {
$columns = array('id', 'full_name', 'username', 'province_id', 'phone_number', 'national_id', 'telephone_id'); $columns = array('id', 'full_name', 'username', 'province_id', 'phone_number', 'national_id', 'telephone_id');
$allowedFilters = $columns; $allowedFilters = $columns;
@@ -68,7 +67,7 @@ class UserManagementController extends Controller
'telephone_id' => $request->telephone_id, 'telephone_id' => $request->telephone_id,
]); ]);
$user->syncPermissions($request->permissions); $user->assignRole($request->role);
}); });
return $this->successResponse(); return $this->successResponse();
@@ -102,7 +101,7 @@ class UserManagementController extends Controller
'telephone_id' => $request->telephone_id 'telephone_id' => $request->telephone_id
]); ]);
$user->syncPermissions($request->permissions); $user->syncRoles($request->role);
}); });
return $this->successResponse(); return $this->successResponse();

View File

@@ -18,11 +18,11 @@ class AuthController extends Controller
if ($this->attemptLogin($request)) if ($this->attemptLogin($request))
{ {
$request->session()->regenerate(); $request->session()->regenerate();
$this->updateLastLogin($request); $this->updateUserInfo($request);
return $this->successResponse(); return $this->successResponse();
} }
return $this->errorResponse(); return $this->errorResponse(__('messages.invalid_credentials'));
} }
protected function attemptLogin(Request $request): bool protected function attemptLogin(Request $request): bool
@@ -30,19 +30,19 @@ class AuthController extends Controller
return Auth::guard()->attempt($request->only('username', 'password')); return Auth::guard()->attempt($request->only('username', 'password'));
} }
protected function updateLastLogin(Request $request): void protected function updateUserInfo(Request $request): void
{ {
if (!$request->session()->exists('last_login')) {
$request->session()->put('last_login', now());
}
Auth::user()->update([ Auth::user()->update([
'last_login' => now(), 'last_login' => now(),
'telephone_id' => $request->telephone_id,
]); ]);
} }
public function logout(Request $request): JsonResponse public function logout(Request $request): JsonResponse
{ {
Auth::user()->update([
'telephone_id' => null,
]);
Auth::guard()->logout(); Auth::guard()->logout();
$request->session()->invalidate(); $request->session()->invalidate();
$request->session()->regenerateToken(); $request->session()->regenerateToken();

View File

@@ -119,7 +119,6 @@ class CallController extends Controller
public function list(ListRequest $request): JsonResponse public function list(ListRequest $request): JsonResponse
{ {
User::query()->find(1)->givePermissionTo([1, 2, 3]);
$phone_number = $request->phone_number; $phone_number = $request->phone_number;
$size = $request->size ?? config('global_variables.MAX_RECORDS_COUNT'); $size = $request->size ?? config('global_variables.MAX_RECORDS_COUNT');

View File

@@ -6,6 +6,7 @@ use App\Http\Requests\ChangePasswordRequest;
use App\Http\Resources\Admin\UserResource; use App\Http\Resources\Admin\UserResource;
use App\Http\Traits\ApiResponse; use App\Http\Traits\ApiResponse;
use Illuminate\Http\JsonResponse; use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash; use Illuminate\Support\Facades\Hash;
class ProfileController extends Controller class ProfileController extends Controller
@@ -15,7 +16,6 @@ class ProfileController extends Controller
public function info(): JsonResponse public function info(): JsonResponse
{ {
return $this->successResponse(new UserResource(auth()->user())); return $this->successResponse(new UserResource(auth()->user()));
} }
public function changePassword(ChangePasswordRequest $request): JsonResponse public function changePassword(ChangePasswordRequest $request): JsonResponse
{ {
@@ -29,4 +29,20 @@ class ProfileController extends Controller
return $this->successResponse(); return $this->successResponse();
} }
public function online(): JsonResponse
{
auth()->user()->update([
'is_online' => true,
]);
return $this->successResponse();
}
public function offline(): JsonResponse
{
auth()->user()->update([
'is_online' => false,
]);
return $this->successResponse();
}
} }

View File

@@ -1,6 +1,6 @@
<?php <?php
namespace App\Http\Requests\Admin; namespace App\Http\Requests\Admin\UserManagement;
use Illuminate\Contracts\Validation\ValidationRule; use Illuminate\Contracts\Validation\ValidationRule;
use Illuminate\Foundation\Http\FormRequest; use Illuminate\Foundation\Http\FormRequest;
@@ -31,7 +31,7 @@ class StoreRequest extends FormRequest
'phone_number' => 'required|numeric|digits:11|unique:users,phone_number|regex:/^09\d{9}$/', 'phone_number' => 'required|numeric|digits:11|unique:users,phone_number|regex:/^09\d{9}$/',
'province_id' => 'required|exists:provinces,id', 'province_id' => 'required|exists:provinces,id',
'password' => 'required|regex:/^(?=.*[a-zA-Z])(?=.*\d).+$/|min:8', 'password' => 'required|regex:/^(?=.*[a-zA-Z])(?=.*\d).+$/|min:8',
'permissions' => 'required|exists:permissions,id', 'role' => 'required|exists:roles,id',
'avatar' => 'mimes:png,jpg,pdf|max:2048', 'avatar' => 'mimes:png,jpg,pdf|max:2048',
'email' => 'email|unique:users,email', 'email' => 'email|unique:users,email',
'telephone_id' => 'required|string|unique:users,telephone_id' 'telephone_id' => 'required|string|unique:users,telephone_id'

View File

@@ -1,6 +1,6 @@
<?php <?php
namespace App\Http\Requests\Admin; namespace App\Http\Requests\Admin\UserManagement;
use Illuminate\Contracts\Validation\ValidationRule; use Illuminate\Contracts\Validation\ValidationRule;
use Illuminate\Foundation\Http\FormRequest; use Illuminate\Foundation\Http\FormRequest;
@@ -36,7 +36,7 @@ class UpdateRequest extends FormRequest
'regex:/^09\d{9}$/' 'regex:/^09\d{9}$/'
], ],
'province_id' => 'required|exists:provinces,id', 'province_id' => 'required|exists:provinces,id',
'permissions' => 'required|exists:permissions,id', 'role' => 'required|exists:roles,id',
'avatar' => 'mimes:png,jpg,pdf|max:2048', 'avatar' => 'mimes:png,jpg,pdf|max:2048',
'email' => ['email', Rule::unique('users', 'email')->ignore($this->user->id)], 'email' => ['email', Rule::unique('users', 'email')->ignore($this->user->id)],
'telephone_id' => ['required', 'string', Rule::unique('users', 'telephone_id')->ignore($this->user->id)] 'telephone_id' => ['required', 'string', Rule::unique('users', 'telephone_id')->ignore($this->user->id)]

View File

@@ -2,6 +2,7 @@
namespace App\Http\Requests\Auth; namespace App\Http\Requests\Auth;
use App\Models\User;
use Illuminate\Contracts\Validation\ValidationRule; use Illuminate\Contracts\Validation\ValidationRule;
use Illuminate\Foundation\Http\FormRequest; use Illuminate\Foundation\Http\FormRequest;
@@ -12,6 +13,11 @@ class LoginRequest extends FormRequest
*/ */
public function authorize(): bool public function authorize(): bool
{ {
$user = User::query()->where('telephone_id', '=', $this->telephone_id)->first();
if ($user && $user->is_online === 1) {
return false;
}
$user->update(['telephone_id' => null]);
return true; return true;
} }
@@ -25,6 +31,7 @@ class LoginRequest extends FormRequest
return [ return [
'username' => 'required|exists:users,username', 'username' => 'required|exists:users,username',
'password' => 'required|string', 'password' => 'required|string',
'telephone_id' => 'required|string'
]; ];
} }
} }

View File

@@ -24,7 +24,7 @@ class StoreRequest extends FormRequest
{ {
return [ return [
'extension' => 'required|string|exists:users,telephone_id', 'extension' => 'required|string|exists:users,telephone_id',
'caller_id' => 'required|numeric|regex:/^09\d{9}$/', 'caller_id' => 'required|numeric',
]; ];
} }
} }

View File

@@ -26,7 +26,6 @@ class UserResource extends JsonResource
'province_id' => $this->province_id, 'province_id' => $this->province_id,
'province_name' => $this->province_name, 'province_name' => $this->province_name,
'role' => $this->getRoleNames()->first(), 'role' => $this->getRoleNames()->first(),
'permissions' => $this->getAllPermissions()->pluck('name'),
'telephone_id' => $this->telephone_id 'telephone_id' => $this->telephone_id
]; ];
} }

View File

@@ -25,7 +25,8 @@ return new class extends Migration
$table->string('province_fa'); $table->string('province_fa');
$table->string('email')->unique()->nullable(); $table->string('email')->unique()->nullable();
$table->dateTime('last_login')->nullable(); $table->dateTime('last_login')->nullable();
$table->string('telephone_id')->unique(); $table->string('telephone_id')->unique()->nullable();
$table->boolean('is_online');
$table->rememberToken()->nullable(); $table->rememberToken()->nullable();
$table->timestamps(); $table->timestamps();
}); });

View File

@@ -15,25 +15,15 @@ return new class extends Migration
$table->id(); $table->id();
$table->string('telephone_id'); $table->string('telephone_id');
$table->string('caller_phone_number'); $table->string('caller_phone_number');
$table->foreignId('province_id')->nullable()->constrained();
$table->foreignId('province_id')
->nullable()
->constrained();
$table->string('province_fa')->nullable(); $table->string('province_fa')->nullable();
$table->foreignId('operator_id')->nullable()->constrained('users');
$table->foreignId('operator_id')
->nullable()
->constrained('users');
$table->string('operator_username')->nullable(); $table->string('operator_username')->nullable();
$table->string('operator_full_name')->nullable(); $table->string('operator_full_name')->nullable();
$table->unsignedSmallInteger('category_id')->nullable(); $table->unsignedSmallInteger('category_id')->nullable();
$table->string('category_name')->nullable(); $table->string('category_name')->nullable();
$table->unsignedSmallInteger('subcategory_id')->nullable(); $table->unsignedSmallInteger('subcategory_id')->nullable();
$table->string('subcategory_name')->nullable(); $table->string('subcategory_name')->nullable();
$table->text('description')->nullable(); $table->text('description')->nullable();
$table->timestamps(); $table->timestamps();
}); });

View File

@@ -2,8 +2,12 @@
namespace Database\Seeders; namespace Database\Seeders;
use App\Models\Permission;
use App\Models\Role;
use App\Models\User;
use Illuminate\Database\Console\Seeds\WithoutModelEvents; use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder; use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
class RoleSeeder extends Seeder class RoleSeeder extends Seeder
{ {
@@ -12,6 +16,16 @@ class RoleSeeder extends Seeder
*/ */
public function run(): void public function run(): void
{ {
// $role = Role::query()->create([
'id' => 1,
'name' => 'super-admin',
'name_fa' => 'ادمین',
'guard_name' => 'web',
'created_at' => now(),
'updated_at' => now()
]);
$role->givePermissionTo(Permission::all());
User::query()->where('username', '=', 'witel')->first()->assignRole('super-admin');
} }
} }

View File

@@ -1,8 +1,7 @@
<?php <?php
use App\Http\Controllers\CallController;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route; use Illuminate\Support\Facades\Route;
Route::get('/user', function (Request $request) { Route::prefix('calls')->post('/', [CallController::class, 'store'])->name('store');
return $request->user();
})->middleware('auth:sanctum');