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

78 lines
2.1 KiB
PHP

<?php
namespace App\Livewire\Admin;
use Livewire\Component;
use Spatie\Permission\Models\Permission;
use Livewire\WithPagination;
use Masmerise\Toaster\Toaster;
class PermissionManager extends Component
{
use WithPagination;
public $name, $permissionId;
public $search = '';
public $isModalOpen = false;
protected $rules = [
'name' => 'required|min:3|unique:permissions,name',
];
public function render()
{
return view('livewire.admin.permission-manager', [
'permissions' => Permission::where('name', 'like', '%' . $this->search . '%')
->latest()
->paginate(10)
]);
}
public function create()
{
$this->reset(['name', 'permissionId']);
$this->isModalOpen = true;
}
public function edit(Permission $permission)
{
$this->permissionId = $permission->id;
$this->name = $permission->name;
$this->isModalOpen = true;
}
public function save()
{
$validationRules = $this->permissionId
? ['name' => 'required|min:3|unique:permissions,name,' . $this->permissionId]
: $this->rules;
$this->validate($validationRules);
Permission::updateOrCreate(['id' => $this->permissionId], [
'name' => $this->name,
'guard_name' => 'web'
]);
$pesan = $this->permissionId ? 'Permission berhasil diperbarui!' : 'Permission baru berhasil ditambahkan!';
Toaster::success($pesan);
$this->isModalOpen = false;
$this->reset(['name', 'permissionId']);
}
public function delete(Permission $permission)
{
// Opsional: Proteksi permission krusial agar tidak terhapus
$protectedPermissions = ['role-list', 'role-create', 'permission-list'];
if (in_array($permission->name, $protectedPermissions)) {
Toaster::error('Permission ini dilindungi sistem dan tidak boleh dihapus!');
return;
}
$permission->delete();
Toaster::error('Permission telah dihapus.');
}
}