simedkom/app/Http/Requests/UserRequest.php

83 lines
2.7 KiB
PHP

<?php
namespace App\Http\Requests;
use App\Rules\MatchCurrentPasswordRule;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Support\Facades\Auth;
use Illuminate\Validation\Rules\Password;
class UserRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*/
public function authorize(): bool
{
return Auth::check() && is_role(['1']);
}
/**
* Get the validation rules that apply to the request.
*
* @return array<string, \Illuminate\Contracts\Validation\ValidationRule|array<mixed>|string>
*/
public function rules(): array
{
$rules = [
'name' => ['required', 'max:100'],
'role_id' => ['required', 'in:1,2,3,4', 'not_in:select'],
'status' => ['required', 'in:1,2', 'not_in:select'],
];
if($this->isMethod('post')){
$rules['email'] = ['required', 'email', 'max:100', 'unique:users,email'];
$rules['password'] = ['required', 'confirmed', Password::min(8)
->mixedCase()
->numbers()
->symbols()];
}else if($this->isMethod('put')){
$rules['email'] = ['required', 'email', 'max:100'];
$rules['password'] = ['nullable', 'confirmed', Password::min(8)
->mixedCase()
->numbers()
->symbols()];
}
return $rules;
}
public function prepareForValidation(){
if (!filled(trim($this->password))) {
$this->request->remove('password');
}
}
public function messages()
{
return [
'name.required' => 'Nama wajib diisi.',
'name.max' => 'Nama tidak boleh lebih dari 100 karakter.',
'email.required' => 'Email wajib diisi.',
'email.email' => 'Email harus menggunakan format email yang valid.',
'email.max' => 'Email tidak boleh lebih dari 100 karakter.',
'role_id.required' => 'Role wajib dipilih.',
'role_id.in' => 'Role harus salah satu dari: Admin, Admin Monitoring, atau Admin Konten.',
'status.required' => 'Status wajib dipilih.',
'status.in' => 'Status harus salah satu dari: Aktif, atau Nonaktif.',
'password.required' => 'Password wajib diisi.',
'password.confirmed' => 'Password dan konfirmasi password tidak cocok.',
'password.min' => 'Password harus memiliki minimal 8 karakter.',
'password.mixedCase' => 'Password harus mengandung huruf besar dan huruf kecil.',
'password.numbers' => 'Password harus mengandung angka.',
'password.symbols' => 'Password harus mengandung simbol.',
];
}
}