Skip to content

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:

// In routes or controllers
$userContext = $request->getAttribute('user_context');

RbacPermissionMiddleware

Protects routes requiring specific permissions. Returns 403 if denied.

Twig Extensions

PermissionExtension

Check permissions in templates:

{% if can('book.create') %}
    <a href="/books/create">New Book</a>
{% endif %}

ConnectedUserExtension

Access current user data via connected_user global variable:

{% if connected_user.isAuthenticated %}
    Logged in as {{ connected_user.email }}
{% endif %}

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