Files
usermanagement/app/Models/PermissionGroup.php
Daeng Deni Mardaeni 1e958c9dd7 feat(permissions): implement permission management enhancements
- Mengubah logika akses `PermissionsController` dengan:
  - Menambahkan konstruktor untuk mendefinisikan user yang terautentikasi.
  - Mengganti logika permission check dari `permissions.*` ke `usermanagement.*`.
  - Menambahkan validasi `abort` untuk operasi CRUD jika user tidak memiliki hak akses.
  - Memperbarui respons penghapusan permission menjadi JSON yang lebih semantik.

- Memperbarui `PermissionGroup` untuk:
  - Menambahkan mekanisme auto-generated slug saat membuat instance baru.

- Memperbaiki export logic pada `PermissionExport` dengan:
  - Mengonversi array `roles` ke collection sebelum menggunakan fungsi `pluck`.

- Menambahkan soft delete pada model `Permission`, memungkinkan penghapusan data non-permanen.

- Menghapus elemen filter dropdown di view `permissions.index` untuk meningkatkan clarity UI.

- Menambahkan comprehensive test suite pada `PermissionsControllerTest` untuk:
  - Menguji validasi CRUD pada permission dengan role dan tanpa role.
  - Menguji restore permissions yang terhapus.
  - Menguji filter, pencarian, dan sorting pada datatables.
  - Menguji export permissions.

Perubahan ini meningkatkan pengelolaan permission, validasi akses, dan memperkaya pengujian untuk memastikan kualitas fitur permission management.
2025-05-18 18:23:06 +07:00

76 lines
2.0 KiB
PHP

<?php
namespace Modules\Usermanagement\Models;
use Spatie\Permission\Models\Role;
class PermissionGroup extends Base
{
protected $fillable = [
'name',
'slug'
];
protected static function boot()
{
parent::boot();
static::creating(function ($model) {
if (!$model->slug) {
$model->slug = \Str::slug($model->name);
}
});
}
/**
* Retrieves all permissions associated with a given permission group ID.
*
* @param int $id The ID of the permission group.
*
* @return \Illuminate\Database\Eloquent\Collection The collection of permissions.
*/
public static function getpermissionsByGroupId($id)
{
return Permission::where('permission_group_id', $id)->get();
}
/**
* Returns a relationship instance for the Permission model.
*
* @return \Illuminate\Database\Eloquent\Relations\HasMany
*/
public function permission()
{
return $this->hasMany(Permission::class);
}
/**
* Retrieves the roles associated with a given permission group.
*
* @param object $group The permission group object.
*
* @return array The array of roles associated with the permission group.
*/
public function roles($group)
{
$permission = Permission::where('permission_group_id', $group->id)->first();
$data = [];
if ($permission) {
$roles = Role::all();
foreach ($roles as $role) {
if ($role->hasPermissionTo($permission->name)) {
array_push($data, $role);
}
}
} else {
$data = Role::all();
}
return $data;
}
}