- Login with Doctrine User entity
- User roles
- User banning
- User suspending
- User permissions
- User last login and last attempt event listeners
- Role permissions
Include the service provider in config/app.php
'Brouwers\LaravelDoctrine\DoctrineServiceProvider',
'Maatwebsite\Usher\UsherServiceProvider'
To change the defaults of this package, publish the config:
php artisan vendor:publish --provider="Maatwebsite\Usher\UsherServiceProvider"
Out of the box, you can use the ACL system without defining your own entities. However this is not recommended!
For example if you want a Customer
and Group
entity, you just have to make sure it implements Maatwebsite\Usher\Contracts\Users\User
. If you want a faster solution, you can optionally extend the MappedSuperclass Maatwebsite\Usher\Domain\Users\User
.
*Note that you will have to define the roles relation yourself.
Example with the MappedSuperclass:
use Doctrine\ORM\Mapping as ORM;
use Maatwebsite\Usher\Domain\Users\User;
use Maatwebsite\Usher\Contracts\Users\User as UserInterface;
/**
* @ORM\Entity(repositoryClass="DoctrineCustomerRepository")
* @ORM\Table(name="customers")
* @ORM\HasLifecycleCallbacks()
*/
class Customer extends User implements UserInterface
{
/**
* @ORM\ManyToMany(targetEntity="Group", inversedBy="customers")
* @ORM\JoinTable(name="customer_groups")
* @var ArrayCollection|\App\Domain\Customers\Entities\Role[]
*/
protected $groups;
/**
* Customer Constructor
*/
public function __construct()
{
$this->groups = new ArrayCollection();
}
/**
* @return ArrayCollection|\Maatwebsite\Usher\Contracts\Roles\Role[]
*/
public function getRoles()
{
return $this->groups;
}
}
Same as with the User
MappedSuperclass, you'll have to define the User relation yourself.
/**
* @ORM\Entity(repositoryClass="DoctrineRoleRepository")
* @ORM\Table(name="groups")
* @ORM\HasLifecycleCallbacks()
*/
class Group extends Role implements RoleInterface
{
/**
* @ORM\ManyToMany(targetEntity="Customer", mappedBy="groups")
* @var ArrayCollection|Customer[]
**/
protected $customers;
/**
* Role Constructor
*/
public function __construct()
{
$this->customers = new ArrayCollection();
}
/**
* @return ArrayCollection|\Maatwebsite\Usher\Contracts\Users\User[]
*/
public function getUsers()
{
return $this->customers;
}
}
Next you'll have to update the class reference in config/usher.php
for the user.entity
en role.entity
return [
'users' => [
'entity' => 'Customer'
],
'roles' => [
'entity' => 'Group'
]
]
Domain Event | When |
---|---|
UserGotAssignedToRole | $user->assignRole($role) |
UserGotBanned | $user->ban() |
UserGotRemovedFromRole | $user->removeRole($role) |
UserGotSuspended | $user->suspend($minutes) |
UserRegistered | $user->register() |
UserUpdatedProfile | $user->update() |
RoleWasCreated | $role->create() |
RoleWasUpdated | $role->update() |
Event listeners can be enabled and disabled inside the config. By default the listed listenes are all enabled.
Listener | When |
---|---|
SaveLastAttemptDate | auth.attempt |
CheckIfUserIsBanned | auth.attempt |
CheckIfUserIsSuspended | auth.attempt |
SaveLastLoginDate | auth.login |