Ich verwende das Shibboleth-Apache-Modul für Single Sign-On. Er setzt die Variable $_SERVER
mit den Berechtigungen eines Benutzers aus dem Active Directory. In meiner Laravel-Anwendung verwende ich einen benutzerdefinierten Authentifizierungs- und Benutzeranbieter, der diese Berechtigungen für die Ressourcenautorisierung nutzt.
Mein vereinfachte Benutzermodell hat etwas Ähnliches:
public function isAdmin()
{
return Request::server('entitlement') === 'admin';
}
Allerdings kann ich nicht herausfinden, wie dies zu testen, weil Request::server
immer nichts für diesen Wert zurückgibt.
public function setUp()
{
$_SERVER['entitlement'] = 'admin';
parent::setUp();
}
public function test_admin_something()
{
$user = factory(User::class)->create();
$response = $this
->actingAs($user)
->get('/admin/somewhere');
var_dump($_SERVER['entitlement']); // string(5) "admin"
var_dump(Request::server('entitlement')); // NULL
$response->assertStatus(200); // always fails 403
}
Ich habe auch versucht setUpBeforeClass
und kontrolliert alle anderen Server-Variablen, die während des Tests anstelle eines benutzerdefinierten gestaltete Request-Objekt ignoriert zu werden scheinen. Ich kann auch nicht die Anfrage Fassade, per the documentation verspotten.
Ändern Versuchen '-> get ('/ admin/irgendwo')' auf '-> Aufruf ('GET', '/ admin/irgendwo', ['Berechtigung' => 'admin']); '. Siehe: https://laravel.com/docs/5.2/testing#custom-http-requests – btl
Welche Testsuite verwenden Sie und welche Version? – Ohgodwhy
@Ohgodwhy phpunit 5.7.20 laravel 5.4.24 –