prevent inactive user from login #57 (#61)

This commit is contained in:
Kevin Papst
2018-01-09 12:16:40 +01:00
committed by GitHub
parent b55c3bbd53
commit f651df2d4b
4 changed files with 111 additions and 41 deletions

View File

@@ -22,7 +22,7 @@
{% for entry in entries %} {% for entry in entries %}
<tr> <tr>
<td class="hidden-xs">{{ entry.id }}</td> <td class="hidden-xs">{{ entry.id }}</td>
<td>{{ entry.alias|default(entry.username) }}</td> <td>{{ widgets.username(entry) }}</td>
<td class="hidden-xs">{{ entry.username }}</td> <td class="hidden-xs">{{ entry.username }}</td>
<td class="hidden-xs hidden-sm">{{ entry.email }}</td> <td class="hidden-xs hidden-sm">{{ entry.email }}</td>
<td class="hidden-xs">{{ entry.title }}</td> <td class="hidden-xs">{{ entry.title }}</td>

View File

@@ -149,11 +149,12 @@
{% macro profile_box(user, stats) %} {% macro profile_box(user, stats) %}
{% import "AvanzuAdminThemeBundle:layout:macros.html.twig" as macro %} {% import "AvanzuAdminThemeBundle:layout:macros.html.twig" as macro %}
{% import "macros/widgets.html.twig" as widgets %}
<div class="box box-primary"> <div class="box box-primary">
<div class="box-body box-profile"> <div class="box-body box-profile">
{{ macro.avatar(user.avatar, user.username, 'profile-user-img img-responsive img-circle') }} {{ macro.avatar(user.avatar, user.username, 'profile-user-img img-responsive img-circle') }}
<h3 class="profile-username text-center">{{ user.alias|default(user.username) }}</h3> <h3 class="profile-username text-center">{{ widgets.username(user) }}</h3>
<p class="text-muted text-center">{{ user.title }}</p> <p class="text-muted text-center">{{ user.title }}</p>
@@ -186,6 +187,8 @@
{# -------------------------------- UNUSED FOR NOW -------------------------------- #} {# -------------------------------- UNUSED FOR NOW -------------------------------- #}
{% macro profile_list_unused(user, items, color) %} {% macro profile_list_unused(user, items, color) %}
{% import "AvanzuAdminThemeBundle:layout:macros.html.twig" as macro %} {% import "AvanzuAdminThemeBundle:layout:macros.html.twig" as macro %}
{% import "macros/widgets.html.twig" as widgets %}
<div class="box box-widget widget-user-2"> <div class="box box-widget widget-user-2">
<!-- Add the bg color to the header using any of the bg-* classes --> <!-- Add the bg color to the header using any of the bg-* classes -->
<div class="widget-user-header bg-{{ color|default(kimai_context.box_color) }}"> <div class="widget-user-header bg-{{ color|default(kimai_context.box_color) }}">
@@ -193,7 +196,7 @@
{{ macro.avatar(user.avatar, user.username) }} {{ macro.avatar(user.avatar, user.username) }}
</div> </div>
<!-- /.widget-user-image --> <!-- /.widget-user-image -->
<h3 class="widget-user-username">{{ user.alias|default(user.username) }}</h3> <h3 class="widget-user-username">{{ widgets.username(user) }}</h3>
<h5 class="widget-user-desc">{{ user.title }}</h5> <h5 class="widget-user-desc">{{ user.title }}</h5>
</div> </div>
<div class="box-footer no-padding"> <div class="box-footer no-padding">
@@ -209,10 +212,11 @@
{# -------------------------------- UNUSED FOR NOW -------------------------------- #} {# -------------------------------- UNUSED FOR NOW -------------------------------- #}
{% macro profile_box_unused(user, stats, color) %} {% macro profile_box_unused(user, stats, color) %}
{% import "AvanzuAdminThemeBundle:layout:macros.html.twig" as macro %} {% import "AvanzuAdminThemeBundle:layout:macros.html.twig" as macro %}
{% import "macros/widgets.html.twig" as widgets %}
<div class="box box-widget widget-user"> <div class="box box-widget widget-user">
<div class="widget-user-header bg-{{ color|default(kimai_context.box_color) }}"> <div class="widget-user-header bg-{{ color|default(kimai_context.box_color) }}">
<h3 class="widget-user-username">{{ user.alias|default(user.username) }}</h3> <h3 class="widget-user-username">{{ widgets.username(user) }}</h3>
<h5 class="widget-user-desc">{{ user.title }}</h5> <h5 class="widget-user-desc">{{ user.title }}</h5>
</div> </div>
<div class="widget-user-image"> <div class="widget-user-image">

View File

@@ -43,53 +43,77 @@ class LoadFixtures implements FixtureInterface, ContainerAwareInterface
$passwordEncoder = $this->container->get('security.password_encoder'); $passwordEncoder = $this->container->get('security.password_encoder');
$claraCustomer = new User(); $claraCustomer = new User();
$claraCustomer->setAlias('Clara Haynes'); $claraCustomer
$claraCustomer->setTitle('CFO'); ->setAlias('Clara Haynes')
$claraCustomer->setUsername('clara_customer'); ->setTitle('CFO')
$claraCustomer->setEmail('clara_customer@example.com'); ->setUsername('clara_customer')
$claraCustomer->setRoles(['ROLE_CUSTOMER']); ->setEmail('clara_customer@example.com')
$claraCustomer->setAvatar('https://www.gravatar.com/avatar/00000000000000000000000000000000?d=monsterid&f=y'); ->setRoles(['ROLE_CUSTOMER'])
$claraCustomer->setPassword($passwordEncoder->encodePassword($claraCustomer, self::DEFAULT_PASSWORD)); ->setAvatar('https://www.gravatar.com/avatar/00000000000000000000000000000000?d=monsterid&f=y')
->setPassword($passwordEncoder->encodePassword($claraCustomer, self::DEFAULT_PASSWORD))
;
$manager->persist($claraCustomer); $manager->persist($claraCustomer);
$johnUser = new User(); $johnUser = new User();
$johnUser->setAlias('John Doe'); $johnUser
$johnUser->setTitle('Developer'); ->setAlias('John Doe')
$johnUser->setUsername('john_user'); ->setTitle('Developer')
$johnUser->setEmail('john_user@example.com'); ->setUsername('john_user')
$johnUser->setRoles(['ROLE_USER']); ->setEmail('john_user@example.com')
$johnUser->setAvatar('https://www.gravatar.com/avatar/00000000000000000000000000000000?d=retro&f=y'); ->setRoles(['ROLE_USER'])
$johnUser->setPassword($passwordEncoder->encodePassword($claraCustomer, self::DEFAULT_PASSWORD)); ->setAvatar('https://www.gravatar.com/avatar/00000000000000000000000000000000?d=retro&f=y')
->setPassword($passwordEncoder->encodePassword($claraCustomer, self::DEFAULT_PASSWORD))
;
$manager->persist($johnUser); $manager->persist($johnUser);
$deactiveUser = new User();
$deactiveUser
->setAlias('Chris Deactive')
->setTitle('Developer (left company)')
->setUsername('chris_user')
->setEmail('chris_user@example.com')
->setRoles(['ROLE_USER'])
->setAvatar('https://www.gravatar.com/avatar/00000000000000000000000000000000?d=retro&f=y')
->setPassword($passwordEncoder->encodePassword($claraCustomer, self::DEFAULT_PASSWORD))
// inactive for testing user login and UI
->setActive(false)
;
$manager->persist($deactiveUser);
$tonyTeamlead = new User(); $tonyTeamlead = new User();
$tonyTeamlead->setAlias('Tony Maier'); $tonyTeamlead
$tonyTeamlead->setTitle('Head of Development'); ->setAlias('Tony Maier')
$tonyTeamlead->setUsername('tony_teamlead'); ->setTitle('Head of Development')
$tonyTeamlead->setEmail('tony_teamlead@example.com'); ->setUsername('tony_teamlead')
$tonyTeamlead->setRoles(['ROLE_TEAMLEAD']); ->setEmail('tony_teamlead@example.com')
$tonyTeamlead->setAvatar('https://en.gravatar.com/userimage/3533186/bf2163b1dd23f3107a028af0195624e9.jpeg'); ->setRoles(['ROLE_TEAMLEAD'])
$tonyTeamlead->setPassword($passwordEncoder->encodePassword($claraCustomer, self::DEFAULT_PASSWORD)); ->setAvatar('https://en.gravatar.com/userimage/3533186/bf2163b1dd23f3107a028af0195624e9.jpeg')
->setPassword($passwordEncoder->encodePassword($claraCustomer, self::DEFAULT_PASSWORD))
;
$manager->persist($tonyTeamlead); $manager->persist($tonyTeamlead);
$annaAdmin = new User(); $annaAdmin = new User();
$annaAdmin->setAlias('Anna Smith'); $annaAdmin
$annaAdmin->setTitle('Administrator'); ->setAlias('Anna Smith')
$annaAdmin->setUsername('anna_admin'); ->setTitle('Administrator')
$annaAdmin->setEmail('anna_admin@example.com'); ->setUsername('anna_admin')
$annaAdmin->setRoles(['ROLE_ADMIN']); ->setEmail('anna_admin@example.com')
// no avatar to test default image! ->setRoles(['ROLE_ADMIN'])
$annaAdmin->setPassword($passwordEncoder->encodePassword($claraCustomer, self::DEFAULT_PASSWORD)); // no avatar to test default image!
->setPassword($passwordEncoder->encodePassword($claraCustomer, self::DEFAULT_PASSWORD))
;
$manager->persist($annaAdmin); $manager->persist($annaAdmin);
$susanSuper = new User(); $susanSuper = new User();
$susanSuper->setAlias('Susan Sanchez'); $susanSuper
$susanSuper->setTitle('Super Administrator'); // no alias to test the username macros
$susanSuper->setUsername('susan_super'); ->setTitle('Super Administrator')
$susanSuper->setEmail('susan_super@example.com'); ->setUsername('susan_super')
$susanSuper->setRoles(['ROLE_SUPER_ADMIN']); ->setEmail('susan_super@example.com')
$susanSuper->setAvatar('https://www.gravatar.com/avatar/00000000000000000000000000000000?d=wavatar&f=y'); ->setRoles(['ROLE_SUPER_ADMIN'])
$susanSuper->setPassword($passwordEncoder->encodePassword($claraCustomer, self::DEFAULT_PASSWORD)); ->setAvatar('/bundles/avanzuadmintheme/img/avatar.png')
->setPassword($passwordEncoder->encodePassword($claraCustomer, self::DEFAULT_PASSWORD))
;
$manager->persist($susanSuper); $manager->persist($susanSuper);
$manager->flush(); $manager->flush();

View File

@@ -4,6 +4,7 @@ namespace AppBundle\Entity;
use AppBundle\Validator\Constraints as KimaiAssert; use AppBundle\Validator\Constraints as KimaiAssert;
use Doctrine\ORM\Mapping as ORM; use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Security\Core\User\AdvancedUserInterface;
use Symfony\Component\Security\Core\User\UserInterface; use Symfony\Component\Security\Core\User\UserInterface;
use Symfony\Component\Validator\Constraints as Assert; use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity; use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
@@ -24,7 +25,7 @@ use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
* *
* @author Kevin Papst <kevin@kevinpapst.de> * @author Kevin Papst <kevin@kevinpapst.de>
*/ */
class User implements UserInterface class User implements UserInterface, AdvancedUserInterface
{ {
const DEFAULT_ROLE = 'ROLE_USER'; const DEFAULT_ROLE = 'ROLE_USER';
@@ -193,11 +194,20 @@ class User implements UserInterface
/** /**
* @return boolean * @return boolean
*/ */
public function getActive() public function isActive()
{ {
return $this->active; return $this->active;
} }
/**
* @deprecated
* @return boolean
*/
public function getActive()
{
return $this->isActive();
}
/** /**
* @param string $password * @param string $password
* @return $this * @return $this
@@ -359,6 +369,38 @@ class User implements UserInterface
return $this; return $this;
} }
/**
* @inheritdoc
*/
public function isAccountNonExpired()
{
return $this->isEnabled();
}
/**
* @inheritdoc
*/
public function isAccountNonLocked()
{
return $this->isEnabled();
}
/**
* @inheritdoc
*/
public function isCredentialsNonExpired()
{
return $this->isEnabled();
}
/**
* @return bool
*/
public function isEnabled()
{
return $this->isActive();
}
/** /**
* Returns the salt that was originally used to encode the password. * Returns the salt that was originally used to encode the password.
*/ */