Shared Module
The Shared module (app/demo/Shared/) provides cross-cutting concerns used by all other modules in the demo application: user context, session management, permissions, and Twig extensions.
User Context
UserContext centralizes authentication state and permission checking:
$userContext = $this->userContextProvider->getCurrentUserContext();
$userContext->isAuthenticated(); // Is user logged in?
$userContext->can('book.create'); // Check single permission
$userContext->canAny(['book.view', 'book.create']); // Any permission
$userContext->getUser(); // Current User entity
Session Service
SessionService wraps the Session plugin with application-specific methods:
// Authentication
$sessionService->setUserAuthenticated($userId, $email);
$sessionService->isUserAuthenticated();
$sessionService->getUserId();
$sessionService->clearUserSession();
// Flash messages
$sessionService->addFlashMessage('success', 'Book created');
Middleware
UserContextMiddleware
Loads the user context from session and injects it into every request:
RbacPermissionMiddleware
Protects routes requiring specific permissions. Returns 403 if denied.
Twig Extensions
PermissionExtension
Check permissions in templates:
ConnectedUserExtension
Access current user data via connected_user global variable:
FlashExtension
Display flash messages via flash_messages global variable:
{% for message in flash_messages.success %}
<div class="alert alert-success">{{ message }}</div>
{% endfor %}
Structure
Shared/
├── Domain/
│ ├── UserContext.php
│ └── Interface/
├── Application/
│ ├── Service/ (SessionService, UserContextProvider)
│ └── Middleware/
├── Infrastructure/
│ └── RbacPermissionService.php
└── Presentation/
└── Twig/ (Extensions)
See Also
- Session Management - SessionService wrapper
- RBAC Permissions - Permission checking
- Authentication - User context
- Middleware Stack - UserContextMiddleware, RbacPermissionMiddleware
- Twig Integration - Twig extensions