diff --git a/fid/config/vufind/permissions.ini b/fid/config/vufind/permissions.ini index d22779c8b85aaab4b6c596847e04815b1b914e3f..4b4053857bab62bba2ddb765c486f5029d74c64a 100644 --- a/fid/config/vufind/permissions.ini +++ b/fid/config/vufind/permissions.ini @@ -39,4 +39,14 @@ permission = fid.LimitedAccess [fid.FullAccess] role[] = loggedin FidApiPermission[] = full_access -permission = fid.FullAccess \ No newline at end of file +permission = fid.FullAccess + +[fid.EBooks] +role[] = loggedin +FidApiPermission[] = limited_access +permission = fid.EBooks + +[fid.Acquisitions] +role[] = loggedin +FidApiPermission[] = limited_access +permission = fid.Acquisitions \ No newline at end of file diff --git a/module/fid/src/Controller/CustomTraits/FidAcquisitionTrait.php b/module/fid/src/Controller/CustomTraits/FidAcquisitionTrait.php index bf40e3846c1b23cb89899025b7cf65de34809ec4..2a8f31a86bb696b51616dbb636cc0d850ba699b2 100644 --- a/module/fid/src/Controller/CustomTraits/FidAcquisitionTrait.php +++ b/module/fid/src/Controller/CustomTraits/FidAcquisitionTrait.php @@ -33,6 +33,7 @@ use fid\Service\DataTransferObject\User; use fid\Validator\SubitoPartialCopyPageBounds; use fid\Validator\SubitoPartialCopyPageSelection; use finc\View\Helper\Root\Citation; +use VuFind\Exception\Forbidden as ForbiddenException; use Zend\Form\Form; /** @@ -89,7 +90,10 @@ trait FidAcquisitionTrait /** @var User $user */ $user = $this->client->requestUserDetails(); - if ($user->hasPermission('limited_access')) { + try { + /* pass if permission is granted, else throw exception and switch to catch block */ + $this->permission()->check('fid.Acquisitions', 'exception'); + $driver = $this->loadRecord(); $recordId = $driver->tryMethod('getUniqueID'); @@ -126,7 +130,7 @@ trait FidAcquisitionTrait $view = $this->createViewModel(); $view->setVariables(compact('form', 'driver', 'user')); $view->setTemplate("fid/record/acquisition-$this->type"); - } else { + } catch (ForbiddenException $ex) { $view = $this->getPermissionDeniedView(); } diff --git a/module/fid/src/View/Helper/Root/Factory.php b/module/fid/src/View/Helper/Root/Factory.php index 89a4248bf602714bb621e068a5e185147f66e45c..044f0f58ea67c15ebf5c3fa731bc7d45b69e8bc7 100644 --- a/module/fid/src/View/Helper/Root/Factory.php +++ b/module/fid/src/View/Helper/Root/Factory.php @@ -68,7 +68,8 @@ class Factory { return new GetIt( $container->get('VuFind\Config')->get('getit'), - $container->get(Client::class) + $container->get(Client::class), + $container->get('VuFind\Role\PermissionManager') ); } } diff --git a/module/fid/src/View/Helper/Root/GetIt.php b/module/fid/src/View/Helper/Root/GetIt.php index 780c6dc60be01d1f94e75d43d939598066f14b6a..b8a79995a376bc6b04a5eeb4374e6094fe6f0e27 100644 --- a/module/fid/src/View/Helper/Root/GetIt.php +++ b/module/fid/src/View/Helper/Root/GetIt.php @@ -29,6 +29,7 @@ namespace fid\View\Helper\Root; use VuFind\I18n\Translator\TranslatorAwareTrait; use VuFind\RecordDriver\AbstractBase; +use VuFind\Role\PermissionManager; use VuFind\View\Helper\Root\Config; use Zend\View\Helper\AbstractHelper; @@ -77,6 +78,14 @@ class GetIt extends AbstractHelper * @var \fid\Service\Client */ protected $fidClient; + + /** + * Permission Manager + * + * @var PermissionManager + */ + protected $permissionManager; + /** * Solr field source_id * @var @@ -155,10 +164,11 @@ class GetIt extends AbstractHelper * * @param Config $getItConfig Get It box Configuration */ - public function __construct($getItConfig, $fidClient) + public function __construct($getItConfig, $fidClient,$permissionManager) { $this->config = $getItConfig; $this->fidClient = $fidClient; + $this->permissionManager = $permissionManager; } /** @@ -188,6 +198,10 @@ class GetIt extends AbstractHelper return $this; } + protected function hasPermission($permission) { + return $this->permissionManager->isAuthorized($permission); + } + /** * Retrieve SIDs from config (getit.ini) * @@ -446,15 +460,15 @@ class GetIt extends AbstractHelper &$isAiSidRecord, &$noticeLinkType ) { - $limited_access = false; + $hasEBookAccess = false; if ($this->fidClient->isLoggedOn()) { - $limited_access = $this->fidClient->requestUserDetails()->hasPermission('limited_access'); + $hasEBookAccess = $this->hasPermission('fid.EBooks'); } $accordeonColor = $this->accordeonColorAlternative; $accordeonHeadline = $this->accordeonHeadlineAlternative; if ($this->fidClient->isLoggedOn()) { - if ($limited_access) { + if ($hasEBookAccess) { $notice = $this->translate('getit_text_13'); } else { $notice = $this->translate('getit_text_13b_1'); @@ -465,7 +479,7 @@ class GetIt extends AbstractHelper $noticeLinkType = "register"; } $boxHeadline = $this->fidClient->isLoggedOn() ? $this->translate('Get it') : $this->translate('getit_logged_not'); - $showLinks = $this->fidClient->isLoggedOn() && $limited_access; + $showLinks = $this->fidClient->isLoggedOn() && $hasEBookAccess; } /**