seperating request validation from controller

pull/19/head
asifmuztaba1 4 years ago
parent 21e119134a
commit fc2c92a6a7

@ -2,6 +2,7 @@
namespace App\Http\Controllers; namespace App\Http\Controllers;
use App\Http\Requests\RoleRequest;
use App\Models\Role; use App\Models\Role;
use Illuminate\Http\Request; use Illuminate\Http\Request;
@ -21,18 +22,13 @@ class RoleController extends Controller {
* @param \Illuminate\Http\Request $request * @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response * @return \Illuminate\Http\Response
*/ */
public function store(Request $request) { public function store(RoleRequest $request) {
$data = $request->validate([ $existing = Role::where('slug', $request->slug)->first();
'name' => 'required',
'slug' => 'required',
]);
$existing = Role::where('slug', $data['slug'])->first();
if (! $existing) { if (! $existing) {
$role = Role::create([ $role = Role::create([
'name' => $data['name'], 'name' => $request->name,
'slug' => $data['slug'], 'slug' => $request->slug,
]); ]);
return $role; return $role;
@ -45,7 +41,7 @@ class RoleController extends Controller {
* Display the specified resource. * Display the specified resource.
* *
* @param \App\Models\Role $role * @param \App\Models\Role $role
* @return \App\Models\Role $role * @return \Illuminate\Http\Response
*/ */
public function show(Role $role) { public function show(Role $role) {
return $role; return $role;
@ -56,7 +52,7 @@ class RoleController extends Controller {
* *
* @param \Illuminate\Http\Request $request * @param \Illuminate\Http\Request $request
* @param \App\Models\Role $role * @param \App\Models\Role $role
* @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\Routing\ResponseFactory|\Illuminate\Http\Response|Role * @return \Illuminate\Http\Response
*/ */
public function update(Request $request, Role $role = null) { public function update(Request $request, Role $role = null) {
if (! $role) { if (! $role) {

@ -2,9 +2,12 @@
namespace App\Http\Controllers; namespace App\Http\Controllers;
use App\Http\Requests\UserRequest;
use App\Models\Role; use App\Models\Role;
use App\Models\User; use App\Models\User;
use App\Models\UserRole;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\Support\Facades\Hash; use Illuminate\Support\Facades\Hash;
use Laravel\Sanctum\Exceptions\MissingAbilityException; use Laravel\Sanctum\Exceptions\MissingAbilityException;
@ -12,38 +15,35 @@ class UserController extends Controller {
/** /**
* Display a listing of the resource. * Display a listing of the resource.
* *
* @return \Illuminate\Http\Response * @return Response
*/ */
public function index() { public function index() {
//
return User::all(); return User::all();
} }
/** /**
* Store a newly created resource in storage. * Store a newly created resource in storage.
* *
* @param \Illuminate\Http\Request $request * @param UserRequest $request
* @return \Illuminate\Http\Response * @return Response
*/ */
public function store(Request $request) { public function store(UserRequest $request) {
$creds = $request->validate([ $user = User::where('email', $request->email)->first();
'email' => 'required|email',
'password' => 'required',
'name' => 'nullable|string',
]);
$user = User::where('email', $creds['email'])->first();
if ($user) { if ($user) {
return response(['error' => 1, 'message' => 'user already exists'], 409); return response(['error' => 1, 'message' => 'user already exists'], 409);
} }
$user = User::create([ $user = User::create([
'email' => $creds['email'], 'email' => $request->email,
'password' => Hash::make($creds['password']), 'password' => Hash::make($request->password),
'name' => $creds['name'], 'name' => $request->name,
]); ]);
$defaultRoleSlug = config('hydra.default_user_role_slug', 'user'); UserRole::create([
$user->roles()->attach(Role::where('slug', $defaultRoleSlug)->first()); 'user_id' => $user->id,
'role_id' => config('hydra.default_user_role_id', 2),
]);
return $user; return $user;
} }
@ -51,16 +51,11 @@ class UserController extends Controller {
/** /**
* Authenticate an user and dispatch token. * Authenticate an user and dispatch token.
* *
* @param \Illuminate\Http\Request $request * @param UserRequest $request
* @return \Illuminate\Http\Response * @return Response
*/ */
public function login(Request $request) { public function login(UserRequest $request) {
$creds = $request->validate([ $user = User::where('email', $request->email)->first();
'email' => 'required|email',
'password' => 'required',
]);
$user = User::where('email', $creds['email'])->first();
if (! $user || ! Hash::check($request->password, $user->password)) { if (! $user || ! Hash::check($request->password, $user->password)) {
return response(['error' => 1, 'message' => 'invalid credentials'], 401); return response(['error' => 1, 'message' => 'invalid credentials'], 401);
} }
@ -79,8 +74,8 @@ class UserController extends Controller {
/** /**
* Display the specified resource. * Display the specified resource.
* *
* @param \App\Models\User $user * @param User $user
* @return \App\Models\User $user * @return User
*/ */
public function show(User $user) { public function show(User $user) {
return $user; return $user;
@ -89,13 +84,11 @@ class UserController extends Controller {
/** /**
* Update the specified resource in storage. * Update the specified resource in storage.
* *
* @param \Illuminate\Http\Request $request * @param Request $request
* @param \App\Models\User $user * @param User $user
* @return User * @return User
*
* @throws MissingAbilityException
*/ */
public function update(Request $request, User $user) { public function update(UserRequest $request, User $user) {
$user->name = $request->name ?? $user->name; $user->name = $request->name ?? $user->name;
$user->email = $request->email ?? $user->email; $user->email = $request->email ?? $user->email;
$user->password = $request->password ? Hash::make($request->password) : $user->password; $user->password = $request->password ? Hash::make($request->password) : $user->password;
@ -118,8 +111,8 @@ class UserController extends Controller {
/** /**
* Remove the specified resource from storage. * Remove the specified resource from storage.
* *
* @param \App\Models\User $user * @param User $user
* @return \Illuminate\Http\Response * @return Response
*/ */
public function destroy(User $user) { public function destroy(User $user) {
$adminRole = Role::where('slug', 'admin')->first(); $adminRole = Role::where('slug', 'admin')->first();
@ -138,12 +131,6 @@ class UserController extends Controller {
return response(['error' => 0, 'message' => 'user deleted']); return response(['error' => 0, 'message' => 'user deleted']);
} }
/**
* Return Auth user
*
* @param Request $request
* @return mixed
*/
public function me(Request $request) { public function me(Request $request) {
return $request->user(); return $request->user();
} }

@ -2,16 +2,16 @@
namespace App\Http\Controllers; namespace App\Http\Controllers;
use App\Http\Requests\UserRoleRequest;
use App\Models\Role; use App\Models\Role;
use App\Models\User; use App\Models\User;
use Illuminate\Http\Request;
class UserRoleController extends Controller { class UserRoleController extends Controller {
/** /**
* Display a listing of the resource. * Display a listing of the resource.
* *
* @param \App\Models\User $user * @param \App\Models\User $user
* @return \App\Models\User $user * @return \Illuminate\Http\Response
*/ */
public function index(User $user) { public function index(User $user) {
return $user->load('roles'); return $user->load('roles');
@ -22,14 +22,11 @@ class UserRoleController extends Controller {
* *
* @param \Illuminate\Http\Request $request * @param \Illuminate\Http\Request $request
* @param \App\Models\User $user * @param \App\Models\User $user
* @return \App\Models\User $user * @return \Illuminate\Http\Response
*/ */
public function store(Request $request, User $user) { public function store(UserRoleRequest $request, User $user) {
$data = $request->validate([ $role = Role::find($request->role_id);
'role_id' => 'required|integer', if (! $user->roles()->find($request->role_id)) {
]);
$role = Role::find($data['role_id']);
if (! $user->roles()->find($data['role_id'])) {
$user->roles()->attach($role); $user->roles()->attach($role);
} }
@ -41,7 +38,7 @@ class UserRoleController extends Controller {
* *
* @param \App\Models\User $user * @param \App\Models\User $user
* @param \App\Models\Role $role * @param \App\Models\Role $role
* @return \App\Models\User $user * @return \Illuminate\Http\Response
*/ */
public function destroy(User $user, Role $role) { public function destroy(User $user, Role $role) {
$user->roles()->detach($role); $user->roles()->detach($role);

@ -0,0 +1,32 @@
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class RoleRequest extends FormRequest {
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize() {
return auth('sanctum')->check();
}
/**
* Get the validation rules that apply to the request.
*
* @return array<string, mixed>
*/
public function rules() {
if ($this->isMethod('PUT')) {
return [];
}
return [
'name' => 'required',
'slug' => 'required',
];
}
}

@ -0,0 +1,45 @@
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class UserRequest extends FormRequest {
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize() {
if ($this->isMethod('PUT')) {
var_dump($this->isMethod('PUT'));
return auth('sanctum')->check();
}
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array<string, mixed>
*/
public function rules() {
if ($this->isMethod('PUT')) {
return [];
}
if ($this->path() == 'api/login') {
return [
'email' => 'required|email',
'password' => 'required',
];
}
return [
'email' => 'required|email',
'password' => 'required',
'name' => 'nullable|string',
];
}
}

@ -0,0 +1,27 @@
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class UserRoleRequest extends FormRequest {
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize() {
return auth('sanctum')->check();
}
/**
* Get the validation rules that apply to the request.
*
* @return array<string, mixed>
*/
public function rules() {
return [
'role_id' => 'required|integer',
];
}
}
Loading…
Cancel
Save