Quelltext des aktuellen Standes
<?php
declare(strict_types=1);
/**
* Hält die genannten Graph-Berechtigungen an dem, was der Abgleich tut.
*
* Die Liste auf der Einstellungsseite ist die einzige Stelle, an der jemand
* nachsieht, bevor er die App-Registrierung einrichtet. Kommt ein Aufruf dazu,
* ohne dass die Liste folgt, scheitert der Abgleich später mit „Forbidden" –
* und niemand weiß, warum.
*/
return static function (): void {
$wurzel = dirname(__DIR__);
$dienst = (string)file_get_contents($wurzel . '/src/Services/IntuneSyncService.php');
$seite = (string)file_get_contents($wurzel . '/templates/admin/inventory/intune.php');
test('Jeder Graph-Bereich, den der Abgleich anspricht, hat seine Berechtigung', function () use ($dienst, $seite) {
// Aufruf-Bereich => Berechtigung, die ihn abdeckt.
$erwartet = [
'deviceManagement/managedDevices' => 'DeviceManagementManagedDevices.Read.All',
'users' => 'User.Read.All',
];
foreach ($erwartet as $bereich => $recht) {
assertTrue(
str_contains($dienst, $bereich),
"Der Abgleich spricht {$bereich} nicht mehr an – die Liste braucht eine Durchsicht"
);
assertTrue(
str_contains($seite, $recht),
"Die Einstellungsseite nennt {$recht} nicht"
);
}
});
test('Schreibende und privilegierte Aktionen sind als solche benannt', function () use ($dienst, $seite) {
// Wer die Zuordnung zurückschreibt oder ein Gerät aus der Verwaltung
// nimmt, braucht mehr als Lesen.
assertTrue(str_contains($dienst, 'users/$ref'), 'Das Zurückschreiben der Person fehlt im Dienst');
assertTrue(
str_contains($seite, 'DeviceManagementManagedDevices.ReadWrite.All'),
'Die schreibende Berechtigung wird nicht genannt'
);
// retire, wipe und setDeviceName sind privilegierte Fernaktionen.
foreach (['/retire', '/wipe', 'setDeviceName'] as $aktion) {
assertTrue(str_contains($dienst, $aktion), "Die Aktion {$aktion} fehlt im Dienst");
}
assertTrue(
str_contains($seite, 'DeviceManagementManagedDevices.PrivilegedOperations.All'),
'Die Berechtigung für die privilegierten Fernaktionen wird nicht genannt'
);
});
test('Die Liste richtet sich nach den eingeschalteten Funktionen', function () use ($seite) {
// Eine Berechtigung, die nur eine abgeschaltete Funktion braucht, soll
// nicht als Pflicht erscheinen – sonst holt sich jeder mehr Rechte als
// nötig.
assertTrue(str_contains($seite, "'noetig' => true"), 'Keine Pflicht-Berechtigung markiert');
assertTrue(
str_contains($seite, "!empty(\$cfg['writeback_user'])"),
'Das Zurückschreiben entscheidet nicht über seine Berechtigung'
);
assertTrue(
str_contains($seite, "'retire', 'wipe'"),
'Die privilegierten Aktionen entscheiden nicht über ihre Berechtigung'
);
});
test('Die Karte sagt, welche Art von Berechtigung gemeint ist', function () use ($seite) {
// Anwendungs- statt delegierte Berechtigung, und ohne Zustimmung des
// Administrators wirkt keine davon.
assertTrue(str_contains($seite, 'Anwendungsberechtigungen'), 'Die Art der Berechtigung fehlt');
assertTrue(str_contains($seite, 'Administratorzustimmung'), 'Der Hinweis auf die Zustimmung fehlt');
});
};