Using LmcRbacMvc and LmcUser
To use the authentication service from LmcUser, there are a few actions to take:
- Set up a user entity that supports roles
- Set up the Laminas authentication service to use LmcUser
- Set up guards
- Optionally, set up a redirect strategy
Set up the user entity
The default user entity class in LmcUser does not implement the Lmc\Rbac\Identity\IdentityInterface
. You will need
to define a user identity class that does by, for example, extending the default user class:
<?php
class CustomUser extends \LmcUser\Entity\User implements \Lmc\Rbac\Identity\IdentityInterface
{
private array $roles = ['user']; // let's make 'user' the default role
public function getRoles(): array
{
return $this->roles;
}
public function setRoles(array $roles): User
{
$this->roles = $roles;
return $this;
}
}
and then set LmcUser to use this entity:
return [
'lmc_user' => [
'user_entity_class' => CustomUser::class,
]
];
This example does not cover modifying the database tables and mappers to fetch/hydrate roles into the user object.
Set up the Laminas authentication service to use LmcUser
You need to set up Laminas Authentication to use the Authentication service from LmcUser.
Add the following alias in your application.config.php
:
return [
'service_manager' => [
'aliases' => [
'Laminas\Authentication\AuthenticationService' => 'lmcuser_auth_service'
]
]
];
Set up guards
The login and register pages should be only accessible from 'guest' users and all other pages should be accessible from logged in users.
Add the LmcUser routes to your guards
:
return [
'lmc_rbac' => [
'guards' => [
\Lmc\Rbac\Mvc\Guard\RouteGuard::class => [
'lmcuser/login' => ['guest'],
'lmcuser/register' => ['guest'], // required if registration is enabled
'lmcuser*' => ['user'] // includes logout, changepassword and changeemail
]
]
]
];
Set up a redirect strategy
If you would like for your application to redirect users to the login page when an unauthorized access is detected, then
you need to setup the RedirectStrategy
:
In your application.config.php:
return [
'listeners' => [
\Lmc\Rbac\Mvc\View\Strategy\RedirectStrategy::class,
],
];
In your LmcRbac config file
return [
'lmc_rbac' => [
'redirect_strategy' => [
'redirect_when_connected' => true,
'redirect_to_route_connected' => 'home',
'redirect_to_route_disconnected' => 'lmcuser/login',
'append_previous_uri' => true,
'previous_uri_query_key' => 'redirectTo'
],
]
];