Skip to content

Commit 47e28c6

Browse files
committed
Allow resolving of users by email for admins
1 parent 5f78782 commit 47e28c6

File tree

2 files changed

+11
-1
lines changed

2 files changed

+11
-1
lines changed

src/ArgumentResolver/UserResolver.php

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
use App\Attribute\VarName;
1616
use App\Entity\User;
1717
use Doctrine\Persistence\ManagerRegistry;
18+
use Symfony\Bundle\SecurityBundle\Security;
1819
use Symfony\Component\HttpFoundation\Request;
1920
use Symfony\Component\HttpKernel\Controller\ValueResolverInterface;
2021
use Symfony\Component\HttpKernel\ControllerMetadata\ArgumentMetadata;
@@ -26,7 +27,7 @@
2627
*/
2728
class UserResolver implements ValueResolverInterface
2829
{
29-
public function __construct(private readonly ManagerRegistry $doctrine)
30+
public function __construct(private readonly ManagerRegistry $doctrine, private readonly Security $security)
3031
{
3132
}
3233

@@ -54,6 +55,11 @@ public function resolve(Request $request, ArgumentMetadata $argument): iterable
5455
}
5556

5657
$user = $this->doctrine->getRepository(User::class)->findOneBy(['usernameCanonical' => $username]);
58+
59+
if (!$user && $this->security->isGranted('ROLE_ADMIN') && \filter_var($username, \FILTER_VALIDATE_EMAIL)) {
60+
$user = $this->doctrine->getRepository(User::class)->findOneBy(['emailCanonical' => $username]);
61+
}
62+
5763
if (!$user) {
5864
throw new NotFoundHttpException('User with name '.$username.' was not found');
5965
}

src/Controller/ProfileController.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,10 @@ public function myProfile(Request $req, FavoriteManager $favMgr, DownloadManager
5858
#[Route(path: '/users/{name}/', name: 'user_profile')]
5959
public function publicProfile(Request $req, #[VarName('name')] User $user, FavoriteManager $favMgr, DownloadManager $dlMgr, #[CurrentUser] ?User $loggedUser = null): Response
6060
{
61+
if ($req->attributes->getString('name') !== $user->getUsername()) {
62+
return $this->redirectToRoute('user_profile', ['name' => $user->getUsername()]);
63+
}
64+
6165
$packages = $this->getUserPackages($req, $user);
6266

6367
$data = [

0 commit comments

Comments
 (0)