61 lines
1.4 KiB
PHP
61 lines
1.4 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Requests\Admin\System;
|
|
|
|
use App\Enums\Permission;
|
|
use Illuminate\Foundation\Http\FormRequest;
|
|
use Illuminate\Support\Str;
|
|
use Illuminate\Validation\Rule;
|
|
|
|
class RoleRequest extends FormRequest
|
|
{
|
|
public function authorize(): bool
|
|
{
|
|
$permission = $this->isMethod('POST')
|
|
? Permission::ROLES_CREATE
|
|
: Permission::ROLES_UPDATE;
|
|
|
|
return $this->user()?->can($permission->value) ?? false;
|
|
}
|
|
|
|
protected function prepareForValidation(): void
|
|
{
|
|
if ($this->has('name')) {
|
|
$this->merge([
|
|
'name' => Str::slug($this->input('name')),
|
|
]);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @return array<string, mixed>
|
|
*/
|
|
public function rules(): array
|
|
{
|
|
$roleId = $this->route('role')?->id;
|
|
|
|
return [
|
|
'name' => [
|
|
'required',
|
|
'string',
|
|
'max:50',
|
|
'regex:/^[a-z0-9\-]+$/',
|
|
Rule::unique('roles', 'name')->ignore($roleId),
|
|
],
|
|
'permissions' => ['nullable', 'array'],
|
|
'permissions.*' => ['string', Rule::exists('permissions', 'name')],
|
|
];
|
|
}
|
|
|
|
/**
|
|
* @return array<string, string>
|
|
*/
|
|
public function attributes(): array
|
|
{
|
|
return [
|
|
'name' => 'nama',
|
|
'permissions' => 'hak akses',
|
|
];
|
|
}
|
|
}
|