Skip to content

Commit 6430943

Browse files
authored
fix: withIdentities/withGroups/withPermissions now work with first() (#1315)
1 parent 0ef1721 commit 6430943

File tree

2 files changed

+46
-0
lines changed

2 files changed

+46
-0
lines changed

src/Models/UserModel.php

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,10 @@ protected function fetchIdentities(array $data): array
143143

144144
$mappedUsers = $this->assignIdentities($data, $identities);
145145

146+
if ($data['singleton'] && ! isset($data['id'])) {
147+
$data['id'] = $data['data']->id;
148+
}
149+
146150
$data['data'] = $data['singleton'] ? $mappedUsers[$data['id']] : $mappedUsers;
147151

148152
return $data;
@@ -213,6 +217,10 @@ protected function fetchGroups(array $data): array
213217

214218
$mappedUsers = $this->assignProperties($data, $groups, 'groups');
215219

220+
if ($data['singleton'] && ! isset($data['id'])) {
221+
$data['id'] = $data['data']->id;
222+
}
223+
216224
$data['data'] = $data['singleton'] ? $mappedUsers[$data['id']] : $mappedUsers;
217225

218226
return $data;
@@ -246,6 +254,10 @@ protected function fetchPermissions(array $data): array
246254

247255
$mappedUsers = $this->assignProperties($data, $permissions, 'permissions');
248256

257+
if ($data['singleton'] && ! isset($data['id'])) {
258+
$data['id'] = $data['data']->id;
259+
}
260+
249261
$data['data'] = $data['singleton'] ? $mappedUsers[$data['id']] : $mappedUsers;
250262

251263
return $data;

tests/Unit/UserTest.php

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -332,6 +332,40 @@ public function testModelFindAllWithGroupsAndPermissions(): void
332332
);
333333
}
334334

335+
public function testModelFirstWithIdentities(): void
336+
{
337+
fake(UserIdentityModel::class, ['user_id' => $this->user->id, 'type' => 'password']);
338+
fake(UserIdentityModel::class, ['user_id' => $this->user->id, 'type' => 'access_token']);
339+
340+
$user = model(UserModel::class)->where('active', 1)->withIdentities()->first();
341+
342+
$this->assertInstanceOf(User::class, $user);
343+
$this->assertCount(2, $user->identities);
344+
}
345+
346+
public function testModelFirstWithGroups(): void
347+
{
348+
fake(GroupModel::class, ['user_id' => $this->user->id, 'group' => 'superadmin']);
349+
fake(GroupModel::class, ['user_id' => $this->user->id, 'group' => 'admin']);
350+
351+
$user = model(UserModel::class)->where('active', 1)->withGroups()->first();
352+
353+
$this->assertInstanceOf(User::class, $user);
354+
$this->assertTrue($user->inGroup('admin'));
355+
}
356+
357+
public function testModelFirstWithPermissions(): void
358+
{
359+
fake(PermissionModel::class, ['user_id' => $this->user->id, 'permission' => 'users.edit']);
360+
fake(PermissionModel::class, ['user_id' => $this->user->id, 'permission' => 'users.delete']);
361+
362+
$user = model(UserModel::class)->where('active', 1)->withPermissions()->first();
363+
364+
$this->assertInstanceOf(User::class, $user);
365+
$this->assertTrue($user->hasPermission('users.delete'));
366+
$this->assertFalse($user->hasPermission('users.add'));
367+
}
368+
335369
public function testLastLogin(): void
336370
{
337371
fake(

0 commit comments

Comments
 (0)