4a7fd46493
La revue de sécurité a relevé que les écritures de TimeEntry (Post/Patch/Delete) étaient gardées par time-tracking.entries.view : une permission de lecture accordait l'écriture (confusion lecture/écriture, least-privilege). - Ajout de la permission time-tracking.entries.manage (catalogue cohérent avec les autres modules en view/manage). - Écritures TimeEntry recâblées sur entries.manage ; self-service conservé (object.getUser() == user). Lecture inchangée (entries.view).
40 lines
951 B
PHP
40 lines
951 B
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace App\Module\TimeTracking;
|
|
|
|
use App\Shared\Domain\Module\ModuleInterface;
|
|
|
|
final class TimeTrackingModule implements ModuleInterface
|
|
{
|
|
public static function id(): string
|
|
{
|
|
return 'time-tracking';
|
|
}
|
|
|
|
public static function label(): string
|
|
{
|
|
return 'Suivi des temps';
|
|
}
|
|
|
|
public static function isRequired(): bool
|
|
{
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* Permissions RBAC fin du Module TimeTracking (2.1).
|
|
*
|
|
* @return list<array{code: string, label: string}>
|
|
*/
|
|
public static function permissions(): array
|
|
{
|
|
return [
|
|
['code' => 'time-tracking.entries.view', 'label' => 'Voir les saisies de temps'],
|
|
['code' => 'time-tracking.entries.manage', 'label' => 'Gérer les saisies de temps'],
|
|
['code' => 'time-tracking.entries.export', 'label' => 'Exporter les saisies de temps'],
|
|
];
|
|
}
|
|
}
|