From fade1f844122568f3771a6b09170f13bc4daf7cf Mon Sep 17 00:00:00 2001 From: Craig Williams Date: Thu, 10 Feb 2022 12:56:18 +0000 Subject: [PATCH] Created some twig extensions for checking membership using the new authorization manager callbacks --- src/ServicesProvider/ServicesProvider.php | 17 +++++- src/Twig/OrganisationsExtension.php | 72 +++++++++++++++++++++++ 2 files changed, 88 insertions(+), 1 deletion(-) create mode 100644 src/Twig/OrganisationsExtension.php diff --git a/src/ServicesProvider/ServicesProvider.php b/src/ServicesProvider/ServicesProvider.php index 2adf14b..46d58ce 100644 --- a/src/ServicesProvider/ServicesProvider.php +++ b/src/ServicesProvider/ServicesProvider.php @@ -13,9 +13,11 @@ use Illuminate\Database\Capsule\Manager as Capsule; use Psr\Container\ContainerInterface; use Psr\Http\Message\ResponseInterface as Response; use Psr\Http\Message\ServerRequestInterface as Request; -use UserFrosting\Sprinkle\Organisations\Database\Models\Interfaces\OrganisationInterface as OrganisationInterface; +use UserFrosting\Sprinkle\Organisations\Database\Models\Interfaces\OrganisationInterface; +use UserFrosting\Sprinkle\Organisations\Twig\OrganisationsExtension; use UserFrosting\Sprinkle\Organisations\Authorize\AuthorizationManager; + /** * Registers services for the organisation sprinkle. * @@ -87,6 +89,19 @@ class ServicesProvider return $new_authorizer; }); + /* + * Extends the 'view' service with the OrganisationsExtension for Twig. + * + * @return \Slim\Views\Twig + */ + $container->extend('view', function ($view, $c) { + $twig = $view->getEnvironment(); + $extension = new OrganisationsExtension($c); + $twig->addExtension($extension); + + return $view; + }); + /* * Returns a callback that handles merging any organisation objects. * diff --git a/src/Twig/OrganisationsExtension.php b/src/Twig/OrganisationsExtension.php new file mode 100644 index 0000000..c29c698 --- /dev/null +++ b/src/Twig/OrganisationsExtension.php @@ -0,0 +1,72 @@ +services = $services; + $this->config = $services->config; + } + + public function getName() + { + return 'avsdev/organisations'; + } + + public function getFunctions() + { + return [ + // Add Twig function for checking permissions during dynamic menu rendering + new TwigFunction('isOrganisationMember', function ($organisation) { + $authorizer = $this->services->authorizer; + $currentUser = $this->services->currentUser; + + return $authorizer->runCallback($currentUser, 'is_organisation_member', $currentUser->id, $organisation->id); + }), + new TwigFunction('isOrganisationAdmin', function ($organisation) { + $authorizer = $this->services->authorizer; + $currentUser = $this->services->currentUser; + + return $authorizer->runCallback($currentUser, 'is_organisation_admin', $currentUser->id, $organisation->id); + }), + ]; + } + + public function getGlobals() + { + return []; + } +}