From 5e232fd0af2df49c900392de067048869b0aed6b Mon Sep 17 00:00:00 2001 From: T'JAMPENS QUENTIN p2406187 Date: Tue, 10 Feb 2026 14:00:03 +0100 Subject: [PATCH] Create other user route --- app/Http/Controllers/UserController.php | 42 +++++++++++++++++++++++++ app/Policies/UsersPolicy.php | 4 +++ routes/auth.php | 2 ++ 3 files changed, 48 insertions(+) diff --git a/app/Http/Controllers/UserController.php b/app/Http/Controllers/UserController.php index 43866ac..40d2928 100644 --- a/app/Http/Controllers/UserController.php +++ b/app/Http/Controllers/UserController.php @@ -12,6 +12,7 @@ use Illuminate\Support\Facades\Gate; use Illuminate\Support\Facades\Hash; use Illuminate\Support\Facades\Log; use App\Services\UserService; +use Pest\Support\Str; use Propaganistas\LaravelPhone\PhoneNumber; class UserController extends Controller @@ -57,6 +58,47 @@ class UserController extends Controller return response()->json(['message' => 'User created successfully']); } + public function createUserByAdmin(Request $request): JsonResponse { + + if(Gate::denies('createOther', $request->user())){ + return response()->json(["message" => "Can't create this user"], 403); + } + + $request->validate([ + 'phone' => ['required', 'phone:FR,national'], + 'email' => ['required', 'email:strict,rfc', 'unique:users,email'], + ]); + + $phone = new PhoneNumber($request["phone"], 'FR'); + + $password = Str::random(12); + + $user = User::create([ + "name" => $request["name"], + "email" => $request["email"], + "password" => Hash::make($password), + "lastname" => $request["lastname"], + "validate" => 1, + "phone" => $phone->formatInternational(), + ]); + + + $notification = Notification::create([ + 'content' => "Nouvel utilisateur crée : {$user->name} {$user->lastname}", + ]); + $admins = User::whereIn('role', [1, 2])->get(); + $notification->users()->attach( + $admins->pluck('id')->toArray() + ); + + broadcast(new UserCreated($user)); + + return response()->json([ + 'message' => 'User created successfully', + "password" => $password, + ]); + } + public function delete(Request $request): JsonResponse { try { $user = User::find($request->user()->id); diff --git a/app/Policies/UsersPolicy.php b/app/Policies/UsersPolicy.php index 5380f51..362e2bf 100644 --- a/app/Policies/UsersPolicy.php +++ b/app/Policies/UsersPolicy.php @@ -12,6 +12,10 @@ class UsersPolicy return $user->role === 1 || $user->role === 2; } + public function createOther(User $user): bool { + return $user->role === 1 || $user->role === 2; + } + public function deactivate(User $user, User $userToDeactivate): bool { return in_array($user->role, [1, 2]) diff --git a/routes/auth.php b/routes/auth.php index e033c23..b15de8d 100644 --- a/routes/auth.php +++ b/routes/auth.php @@ -10,3 +10,5 @@ Route::post("/users/register", [UserController::class, "create"]); Route::middleware('web')->post('/users/login', [AuthController::class, 'login']); Route::middleware(['web', 'auth:sanctum'])->post('/users/logout', [AuthController::class, 'logout']); + +Route::middleware(['web', 'auth:sanctum'])->post('/users/create', [UserController::class, 'createUserByAdmin']);