- Implemented RoleEdit component for editing roles with permissions. - Created RoleIndex component for listing roles with delete confirmation. - Added routes for role management in web.php with appropriate permissions. - Developed RoleTest to cover authentication, authorization, and data integrity for role management.
55 lines
1.4 KiB
PHP
55 lines
1.4 KiB
PHP
<?php
|
|
|
|
namespace App\Services\Admin\Settings;
|
|
|
|
use Illuminate\Support\Collection;
|
|
use Illuminate\Support\Facades\DB;
|
|
use Spatie\Permission\Models\Permission;
|
|
use Spatie\Permission\Models\Role;
|
|
|
|
class RoleService
|
|
{
|
|
public function getAll(): Collection
|
|
{
|
|
return Role::withCount('permissions')->get();
|
|
}
|
|
|
|
public function getById(int $id): Role
|
|
{
|
|
return Role::with('permissions')->findOrFail($id);
|
|
}
|
|
|
|
public function create(array $data): Role
|
|
{
|
|
return DB::transaction(function () use ($data) {
|
|
$role = Role::create(['name' => $data['name']]);
|
|
$role->syncPermissions($data['permissions']);
|
|
|
|
return $role;
|
|
});
|
|
}
|
|
|
|
public function update(Role $role, array $data): Role
|
|
{
|
|
DB::transaction(function () use ($role, $data) {
|
|
$role->update(['name' => $data['name']]);
|
|
$role->syncPermissions($data['permissions']);
|
|
});
|
|
|
|
return $role->fresh('permissions');
|
|
}
|
|
|
|
public function delete(Role $role): bool
|
|
{
|
|
return $role->delete();
|
|
}
|
|
|
|
public function getPermissionsByModule(): array
|
|
{
|
|
return Permission::all()
|
|
->groupBy(fn ($p) => explode('.', $p->name)[0])
|
|
->map(fn ($group) => $group->pluck('name')->map(fn ($name) => explode('.', $name, 2)[1])->values()->toArray())
|
|
->toArray();
|
|
}
|
|
}
|