77 lines
1.8 KiB
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.');
|
|
}
|
|
}
|