diff --git a/app/Http/Controllers/UserController.php b/app/Http/Controllers/UserController.php index 1da2c79..363dc88 100644 --- a/app/Http/Controllers/UserController.php +++ b/app/Http/Controllers/UserController.php @@ -6,10 +6,15 @@ use App\Models\User; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; use Illuminate\Support\Facades\Hash; -use Psy\Util\Json; +use phpDocumentor\Reflection\Types\Boolean; class UserController extends Controller { + public function isAdmin(int $role) { + if($role != 1) return false; + return true; + } + public function create(Request $request): JsonResponse { User::create([ "name" => $request["name"], @@ -85,4 +90,20 @@ class UserController extends Controller return response()->json(['message' => $e->getMessage()]); } } + + public function addRole(Request $request, int $id): JsonResponse { + if(!$this->isAdmin($request->user()->role)){ + return response()->json(["message" => "Can't add role to this user"], 403); + } + + try { + $user = User::find($id); + $user->role = $request['role']; + $user->save(); + + return response()->json(['message' => 'User role added successfully']); + } catch(\Exception $e) { + return response()->json(['message' => $e->getMessage()]); + } + } } diff --git a/routes/api.php b/routes/api.php index c985128..58ffbc8 100644 --- a/routes/api.php +++ b/routes/api.php @@ -24,3 +24,5 @@ Route::middleware(['web', 'auth:sanctum'])->get('/users/{id}', [UserController:: Route::middleware(['web', 'auth:sanctum'])->post('/users/update', [UserController::class, "update"]); Route::middleware(['web', 'auth:sanctum'])->post('/users/{id}/validate', [UserController::class, "validate"]); + +Route::middleware(['web', 'auth:sanctum'])->post('/users/{id}/role', [UserController::class, "addRole"]); diff --git a/tests/Users/Modify user role.bru b/tests/Users/Modify user role.bru new file mode 100644 index 0000000..f216c3c --- /dev/null +++ b/tests/Users/Modify user role.bru @@ -0,0 +1,35 @@ +meta { + name: Modify user role + type: http + seq: 6 +} + +post { + url: http://localhost:8000/api/users/5/role + body: json + auth: inherit +} + +headers { + Accept: application/json + X-XSRF-TOKEN: eyJpdiI6IkN0OWIwbGM5RU8yd2FzMmFURDRuNUE9PSIsInZhbHVlIjoiRjBtd0o5Um9jaFN4dDkzbGlGNFBEWlNDOEFUdGJQVzgrSmpabTlQMDZUekhnY3NnWG55RUQwUDdKazBlRk1pWTloUGRKQjhNRE5oVCtLT2dLSmY1d2RRSEFuNjZ3UDNWVURLNERBckd1TnMwM2ZOZ2xzM2dlQjFwYlZIemZmRGEiLCJtYWMiOiI4ZGVkNTY3NjIwMjU3YmZiOWRjZDE1NDQ1OGU3ZTkwYzFlYTMzYmEwNDdhNWMwNWQxNWUyMTBjODMyMTY5ZGRlIiwidGFnIjoiIn0= +} + +body:json { + { + "role": {{role}} + } +} + +vars:pre-request { + role: 2 +} + +assert { + res.status: eq 200 +} + +settings { + encodeUrl: true + timeout: 0 +} diff --git a/tests/collection.bru b/tests/collection.bru new file mode 100644 index 0000000..9220456 --- /dev/null +++ b/tests/collection.bru @@ -0,0 +1,3 @@ +headers { + Accept: application/json +}