78 lines
2.1 KiB
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.');
|
|
}
|
|
}
|