si-klinik/sk-klinik.my.id/app/Livewire/Admin/RoleManager.php

77 lines
1.8 KiB
PHP

<?php
namespace App\Livewire\Admin;
use Livewire\Component;
use Spatie\Permission\Models\Role;
use Livewire\WithPagination;
use Masmerise\Toaster\Toaster; // Import Toaster
class RoleManager extends Component
{
use WithPagination;
public $name, $roleId;
public $search = '';
public $isModalOpen = false;
protected $rules = [
'name' => 'required|min:3|unique:roles,name',
];
public function render()
{
return view('livewire.admin.role-manager', [
'roles' => Role::where('name', 'like', '%' . $this->search . '%')
->latest()
->paginate(10)
]);
}
public function create()
{
$this->reset(['name', 'roleId']);
$this->isModalOpen = true;
}
public function edit(Role $role)
{
$this->roleId = $role->id;
$this->name = $role->name;
$this->isModalOpen = true;
}
public function save()
{
$validationRules = $this->roleId
? ['name' => 'required|min:3|unique:roles,name,' . $this->roleId]
: $this->rules;
$this->validate($validationRules);
Role::updateOrCreate(['id' => $this->roleId], [
'name' => $this->name,
'guard_name' => 'web' // Default guard
]);
$pesan = $this->roleId ? 'Role berhasil diperbarui!' : 'Role baru berhasil ditambahkan!';
Toaster::success($pesan);
$this->isModalOpen = false;
$this->reset(['name', 'roleId']);
}
public function delete(Role $role)
{
$protectedRoles = ['admin', 'Admin', 'super-admin'];
if (in_array($role->name, $protectedRoles)) {
Toaster::error('Role ini adalah role sistem dan tidak boleh dihapus!');
return;
}
$role->delete();
Toaster::error('Role telah dihapus permanen.');
}
}