我要测试的是访问某些路由,但是这些路由在laratrust角色中间件中,该角色是auth用户必须是超级管理员才能进入此路由,我的问题是我不知道如何编写此路由功能。
我试图在这样的测试功能中让用户成为超级管理员
public function Test()
{
$user = factory(User::class)->create();
$user->attachRole('superadministrator');
$this->actingAs($user, 'api');
$response = $this->json('GET', 'api/users');
$response->assertStatus(200);
}
但是即使我检查了该用户是超级管理员的数据库也无法正常工作,并且测试给出了我不是超级管理员的身份
这是我的api路由:
Route::group(['middleware' => ['auth:api', 'role:superadministrator']],
function()
{
Route::apiResource('users', 'UserController');
}
这是我在UserController中的索引函数:
public function index()
{
return Response()->json(User::all, 200);
}
我希望某个功能可以访问此路由,因为该组中有更多路由,其余测试取决于此功能
答案 0 :(得分:0)
我从未使用过Laratrust,但是快速浏览其源代码后,问题似乎在于您需要在 [{
"relation": ["delegate_permission/common.handle_all_urls"],
"target": {
"namespace": "android_app",
"package_name": "pk.sastaticket.staging",
"sha256_cert_fingerprints":
["12:57:39:74:FA:3D:64:A7:37:F2:A1:7A:2F:DD:73:AB:D0:82:29:D4:47:A9:B5:5F:53:6B:50:FE:E2:21:1B:73"]
}
},
{
"relation": ["delegate_permission/common.get_login_creds"],
"target": {
"namespace": "web",
"site": "https://staging.sastaticket.pk"
}
},
{
"relation": ["delegate_permission/common.get_login_creds"],
"target": {
"namespace": "android_app",
"package_name": "pk.sastaticket.staging",
"sha256_cert_fingerprints":
["12:57:39:74:FA:3D:64:A7:37:F2:A1:7A:2F:DD:73:AB:D0:82:29:D4:47:A9:B5:5F:53:6B:50:FE:E2:21:1B:73"]
}
}]
中间件检查中指定api
防护。将role
添加到您的,guard:api
中间件中:
role
在Route::group(['middleware' => ['auth:api', 'role:superadministrator,guard:api']], function() {
Route::apiResource('users', 'UserController');
}
中间件检查中,如果未指定防护,它将使用auth配置中定义的默认防护(如果未更改,则为role
)。因此,中间件将从web
身份验证保护中寻找用户,该保护不存在。
好消息是,您的测试成功了!它在您的路线定义中发现了一个错误。