我正在使用shibboleth apache模块进行联合单点登录。它使用活动目录中的用户权限设置$_SERVER
变量。在我的laravel应用程序中,我使用自定义身份验证和用户提供程序,利用这些权利进行资源授权。
我的简化用户模型有这样的内容:
public function isAdmin()
{
return Request::server('entitlement') === 'admin';
}
但是,我无法弄清楚如何测试这个,因为Request::server
总是不返回该值。
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
}
我还尝试了setUpBeforeClass
并检查了在测试过程中似乎被忽略的所有其他服务器变量,而不是自定义的自定义Request对象。我也无法模仿Requestfaçade,per the documentation。
答案 0 :(得分:3)
深入研究the source code会发现一种未记录的方法withServerVariables
public function test_admin_something()
{
$user = factory(User::class)->create();
$response = $this
->withServerVariables(['entitlement' => 'admin'])
->actingAs($user)
->get('/admin/somewhere');
$response->assertStatus(200);
}