@Tray2
The route
Route::middleware(['auth', 'verified'])->group(function () {
...
Route::middleware('not-banned')->group(function () {
...
Route::middleware('business')->group(function () {
...
Route::resource('users', UserController::class);
});
});
});
The controller
public function create()
{
Gate::authorize('create', User::class);
$user = new User;
if (auth()->user()->isSuperadmin()) {
$roles = Arr::map(RoleEnum::superadminRoles(), function ($role) {
return [
'value' => $role->value,
'label' => $role->label(),
];
});
} else {
$roles = Arr::map(RoleEnum::organizationRoles(), function ($role) {
return [
'value' => $role->value,
'label' => $role->label(),
];
});
}
return view('users.create', compact('user', 'roles'));
}
The policy
public function create(User $user): bool
{
return $user->isManager();
}
The model
public function isManager(): bool
{
return in_array(RoleEnum::MANAGER->value, $this->roles ?? []);
}
The view
<x-layouts.app>
<div class="grow flex flex-col items-center justify-center">
<div class="p-8 bg-white rounded-lg shadow-lg w-full max-w-md border-2 border-primary flex flex-col gap-4">
<form method="POST" action="{{ route('users.store') }}" enctype="multipart/form-data">
@csrf
<div class="space-y-4">
<x-ui.image-uploader :initialImage="$user->avatar" :initialImageId="$user->avatar_id"></x-ui.image-uploader>
<x-ui.input field="name" value="{{ old('name', $user->name) }}" :error="$errors">Nom / pseudo</x-ui.input>
<x-ui.input field="email" value="{{ old('email', $user->email) }}" :error="$errors">Adresse email</x-ui.input>
@if (!$user->isSuperadmin() && !$user->isManager())
<x-ui.field-wrapper>
<x-ui.label>Rôles</x-ui.label>
<div class="flex flex-col gap-2 px-3 py-2 rounded-lg border border-gray-300 focus:border-primary">
@foreach ($roles as $role)
<div class="flex items-center gap-2">
<input
type="checkbox"
id="roles.{{ $role['value'] }}"
name="roles[]"
value="{{ $role['value'] }}"
@checked(in_array($role['value'], old('roles', $user->roles ?? [])))
>
<x-ui.label for="roles.{{ $role['value'] }}">
{{ $role['label'] }}
</x-ui.label>
</div>
@endforeach
</div>
<x-ui.error>{{ $errors->first('roles') }}</x-ui.error>
</x-ui.field-wrapper>
@endif
<x-ui.submit-cancel-buttons cancelRoute="{{ route('users.index') }}"></x-ui.submit-cancel-buttons>
</div>
</form>
</div>
</div>
</x-layouts.app>