Generell solltest du auf Contao 4.12 aktualisieren, da Contao 4.11 nicht mehr aktiv supported wird.
Zu deiner Aufgabenstellung: viele Wege führen zum Ziel . Einerseits könntest du dir den Security Helper im Template holen (der wird von Contao public gemacht und kann daher über den Container geholt werden). Damit kannst du dann, ab Contao 4.12, direkt abfragen ob ein Mitglied zu einer Gruppe gehört:
PHP-Code:
use Contao\CoreBundle\Security\ContaoCorePermissions;
use Contao\System;
use Symfony\Component\Security\Core\Security;
/** @var Security $security */
$security = System::getContainer()->get('security.helper');
// Check if member belongs to group
if ($security->isGranted(ContaoCorePermissions::MEMBER_IN_GROUPS, 1)) {
// …
}
Einen Service über System::getContainer() zu holen ist aber nicht empfohlen. Besser ist es richtige Dependency Injection zu nutzen. Du könntest statt dessen über den parseTemplate Hook allen Frontend Templates eine isMemberOf Hilfsfunktion hinzufügen, die du dann ohne Weiteres im Template nutzen kannst:
PHP-Code:
// src/EventListener/ParseTemplateListener.php
declare(strict_types=1);
namespace App\EventListener;
use Contao\CoreBundle\Security\ContaoCorePermissions;
use Contao\CoreBundle\ServiceAnnotation\Hook;
use Contao\FrontendTemplate;
use Contao\Template;
use Symfony\Component\Security\Core\Security;
/**
* @Hook("parseTemplate")
*/
class ParseTemplateListener
{
private $security;
public function __construct(Security $security)
{
$this->security = $security;
}
public function __invoke(Template $template): void
{
if (!$template instanceof FrontendTemplate) {
return;
}
$template->isMemberOf = function ($groupId): bool {
return $this->security->isGranted(ContaoCorePermissions::MEMBER_IN_GROUPS, $groupId);
};
}
}
In jedem Frontend Template kannst du dann folgendes machen:
PHP-Code:
<?php if ($this->isMemberOf(1)): ?>
<p>Member belongs to group ID 1!</p>
<?php endif; ?>
Oder auch:
PHP-Code:
<?php if ($this->isMemberOf([1, 2])): ?>
<p>Member blongs to either group ID 1 or 2!</p>
<?php endif; ?>
Lesezeichen