Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions config/routing/admin_users.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,22 @@ sfs_user_admin_users_delete:
controller: sfs_user.admin.user.controller::delete
path: /{user}/delete

sfs_user_admin_users_confirm:
controller: Softspring\UserBundle\Controller\Admin\UsersController::userConfirm
path: /{user}/confirm

sfs_user_admin_users_unconfirm:
controller: Softspring\UserBundle\Controller\Admin\UsersController::userUnconfirm
path: /{user}/unconfirm

sfs_user_admin_users_enable:
controller: Softspring\UserBundle\Controller\Admin\UsersController::userEnable
path: /{user}/enable

sfs_user_admin_users_disable:
controller: Softspring\UserBundle\Controller\Admin\UsersController::userDisable
path: /{user}/disable

sfs_user_admin_users_resend_confirmation:
controller: Softspring\UserBundle\Controller\Admin\UsersController::resendConfirmationEmail
path: /{user}/resend
Expand Down
4 changes: 4 additions & 0 deletions config/security/admin_role_hierarchy.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,10 @@ security:
- PERMISSION_SFS_USER_ADMIN_USERS_DELETE
- PERMISSION_SFS_USER_ADMIN_USERS_UPDATE
- PERMISSION_SFS_USER_ADMIN_HISTORY_LIST
- PERMISSION_SFS_USER_ADMIN_USERS_CONFIRM
- PERMISSION_SFS_USER_ADMIN_USERS_UNCONFIRM
- PERMISSION_SFS_USER_ADMIN_USERS_ENABLE
- PERMISSION_SFS_USER_ADMIN_USERS_DISABLE
ROLE_SFS_USER_ADMIN_ADMINISTRATORS_RO:
- PERMISSION_SFS_USER_ADMIN_ADMINISTRATORS_LIST
- PERMISSION_SFS_USER_ADMIN_ADMINISTRATORS_DETAILS
Expand Down
79 changes: 78 additions & 1 deletion src/Controller/Admin/UsersController.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,20 @@

namespace Softspring\UserBundle\Controller\Admin;

use DateTime;
use Doctrine\ORM\EntityManagerInterface;
use Exception;
use Softspring\Component\Events\DispatchGetResponseTrait;
use Softspring\UserBundle\Event\GetResponseUserEvent;
use Softspring\UserBundle\Mailer\UserMailerInterface;
use Softspring\UserBundle\Manager\UserManagerInterface;
use Softspring\UserBundle\Model\ConfirmableInterface;
use Softspring\UserBundle\Model\EnablableInterface;
use Softspring\UserBundle\Model\RolesAdminInterface;
use Softspring\UserBundle\Model\User;
use Softspring\UserBundle\Model\UserInterface;
use Softspring\UserBundle\SfsUserEvents;
use Softspring\UserBundle\Util\TokenGeneratorInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
use Symfony\Component\HttpFoundation\Request;
Expand All @@ -30,12 +34,15 @@ class UsersController extends AbstractController

protected EventDispatcherInterface $eventDispatcher;

public function __construct(UserManagerInterface $userManager, EntityManagerInterface $em, ?UserMailerInterface $userMailer, EventDispatcherInterface $eventDispatcher)
protected TokenGeneratorInterface $tokenGenerator;

public function __construct(UserManagerInterface $userManager, EntityManagerInterface $em, ?UserMailerInterface $userMailer, EventDispatcherInterface $eventDispatcher, TokenGeneratorInterface $tokenGenerator)
{
$this->userManager = $userManager;
$this->em = $em;
$this->userMailer = $userMailer;
$this->eventDispatcher = $eventDispatcher;
$this->tokenGenerator = $tokenGenerator;
}

public function promoteAdmin(string $user, Request $request): Response
Expand Down Expand Up @@ -84,6 +91,76 @@ public function usersPendingConfirmCountWidget(): Response
]);
}

public function userConfirm(string $user): Response
{
/** @var User $user */
$user = $this->userManager->findUserBy(['id' => $user]);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For PHPStan insert /** @var User|ConfirmableInterface $user */


$this->denyAccessUnlessGranted('PERMISSION_SFS_USER_ADMIN_USERS_CONFIRM', $user);

if (!$user instanceof UserInterface || !$user instanceof ConfirmableInterface) {
throw new Exception(sprintf('User %s class must implement %s to confirm', get_class($user), ConfirmableInterface::class));
}

$user->setConfirmationToken(null);
$user->setConfirmedAt(new DateTime());
$this->userManager->saveEntity($user);

return $this->redirectToRoute('sfs_user_admin_users_details', ['user' => $user->getId()]);
}

public function userUnconfirm(string $user): Response
{
/** @var User $user */
$user = $this->userManager->findUserBy(['id' => $user]);

$this->denyAccessUnlessGranted('PERMISSION_SFS_USER_ADMIN_USERS_UNCONFIRM', $user);

if (!$user instanceof UserInterface || !$user instanceof ConfirmableInterface) {
throw new Exception(sprintf('User %s class must implement %s to confirm', get_class($user), ConfirmableInterface::class));
}

$user->setConfirmationToken($this->tokenGenerator->generateToken());
$user->setConfirmedAt(null);
$this->userManager->saveEntity($user);

return $this->redirectToRoute('sfs_user_admin_users_details', ['user' => $user->getId()]);
}

public function userEnable(string $user): Response
{
/** @var User $user */
$user = $this->userManager->findUserBy(['id' => $user]);

$this->denyAccessUnlessGranted('PERMISSION_SFS_USER_ADMIN_USERS_ENABLE', $user);

if (!$user instanceof UserInterface || !$user instanceof EnablableInterface) {
throw new Exception(sprintf('User %s class must implement %s to enable', get_class($user), EnablableInterface::class));
}

$user->setEnabled(true);
$this->userManager->saveEntity($user);

return $this->redirectToRoute('sfs_user_admin_users_details', ['user' => $user->getId()]);
}

public function userDisable(string $user): Response
{
/** @var User $user */
$user = $this->userManager->findUserBy(['id' => $user]);

$this->denyAccessUnlessGranted('PERMISSION_SFS_USER_ADMIN_USERS_DISABLE', $user);

if (!$user instanceof UserInterface || !$user instanceof EnablableInterface) {
throw new Exception(sprintf('User %s class must implement %s to enable', get_class($user), EnablableInterface::class));
}

$user->setEnabled(false);
$this->userManager->saveEntity($user);

return $this->redirectToRoute('sfs_user_admin_users_details', ['user' => $user->getId()]);
}

public function resendConfirmationEmail(string $user, Request $request): Response
{
/** @var ConfirmableInterface|UserInterface $user */
Expand Down
3 changes: 3 additions & 0 deletions translations/sfs_user.en.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -160,10 +160,13 @@ admin_users:
unconfirm: "Unconfirm"
confirm: "Confirm"
resend_confirm: "Resend confirm"
enable: "Enable"
disable: "Disable"
fields:
username: "Username"
email: "Email"
confirmed: "Confirmation"
enabled: "Enabled"
lastLogin: "Last access"
lastLogin.notYet: "not yet"
role: "Role"
Expand Down
3 changes: 3 additions & 0 deletions translations/sfs_user.es.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -160,10 +160,13 @@ admin_users:
unconfirm: "Desconfirmar manualmente"
confirm: "Confirmar manualmente"
resend_confirm: "Reenviar confirmación"
enable: "Habilitar"
disable: "Deshabilitar"
fields:
username: "Nombre de usuario"
email: "Email"
confirmed: "Confirmado"
enabled: "Habilitado"
lastLogin: "Último acceso"
lastLogin.notYet: "aún no ha accedido"
role: "Rol"
Expand Down