From 13e6c0e221639be2a159107d80250c77b56ca712 Mon Sep 17 00:00:00 2001 From: Jochen Lienhard <lienhard@ub.uni-freiburg.de> Date: Thu, 12 Mar 2015 15:00:59 -0400 Subject: [PATCH] Authorization support for tabs (including access.StaffViewTab permission). --- config/vufind/permissions.ini | 7 ++++++ module/VuFind/config/module.config.php | 3 +++ .../src/VuFind/RecordTab/AbstractBase.php | 25 +++++++++++++++++-- .../src/VuFind/RecordTab/StaffViewArray.php | 8 ++++++ .../src/VuFind/RecordTab/StaffViewMARC.php | 8 ++++++ .../Role/DynamicRoleProviderFactory.php | 7 ++++++ 6 files changed, 56 insertions(+), 2 deletions(-) diff --git a/config/vufind/permissions.ini b/config/vufind/permissions.ini index 87f703e397b..9f555da90b0 100644 --- a/config/vufind/permissions.ini +++ b/config/vufind/permissions.ini @@ -54,9 +54,16 @@ ; ; access.AdminModule - Controls access to the admin panel (if enabled in config.ini) ; access.EITModule - Controls access to the EBSCO EIT module (if active) +; access.StaffViewTab - Controls access to the staff view tab in record mode ; access.SummonExtendedResults - Controls visibility of protected Summon results ; Default configuration for the EIT module; see EIT.ini for some notes on this. [default.EITModule] role = loggedin permission = access.EITModule + +; Show staff view for all users by default +[default.StaffViewTab] +role[] = guest +role[] = loggedin +permission = access.StaffViewTab \ No newline at end of file diff --git a/module/VuFind/config/module.config.php b/module/VuFind/config/module.config.php index 9fa8631b69b..2a639ccad26 100644 --- a/module/VuFind/config/module.config.php +++ b/module/VuFind/config/module.config.php @@ -472,6 +472,9 @@ $config = [ 'staffviewmarc' => 'VuFind\RecordTab\StaffViewMARC', 'toc' => 'VuFind\RecordTab\TOC', ], + 'initializers' => [ + 'ZfcRbac\Initializer\AuthorizationServiceInitializer' + ], ], 'related' => [ 'abstract_factories' => ['VuFind\Related\PluginFactory'], diff --git a/module/VuFind/src/VuFind/RecordTab/AbstractBase.php b/module/VuFind/src/VuFind/RecordTab/AbstractBase.php index a8867355000..11a6c60a746 100644 --- a/module/VuFind/src/VuFind/RecordTab/AbstractBase.php +++ b/module/VuFind/src/VuFind/RecordTab/AbstractBase.php @@ -26,6 +26,8 @@ * @link http://vufind.org/wiki/vufind2:record_tabs Wiki */ namespace VuFind\RecordTab; +use ZfcRbac\Service\AuthorizationServiceAwareInterface, + ZfcRbac\Service\AuthorizationServiceAwareTrait; /** * Record tab abstract base class @@ -36,8 +38,19 @@ namespace VuFind\RecordTab; * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License * @link http://vufind.org/wiki/vufind2:record_tabs Wiki */ -abstract class AbstractBase implements TabInterface +abstract class AbstractBase implements TabInterface, + AuthorizationServiceAwareInterface { + use AuthorizationServiceAwareTrait; + + /** + * Permission that must be granted to access this module (null for no + * restriction) + * + * @var string + */ + protected $accessPermission = null; + /** * Record driver associated with the tab * @@ -59,7 +72,15 @@ abstract class AbstractBase implements TabInterface */ public function isActive() { - // Assume active by default; subclasses may add rules. + // If accessPermission is set, check for authorization to enable tab + if (!empty($this->accessPermission)) { + $auth = $this->getAuthorizationService(); + if (!$auth) { + throw new \Exception('Authorization service missing'); + } + return $auth->isGranted($this->accessPermission); + } + return true; } diff --git a/module/VuFind/src/VuFind/RecordTab/StaffViewArray.php b/module/VuFind/src/VuFind/RecordTab/StaffViewArray.php index cf58f712718..b789be81dde 100644 --- a/module/VuFind/src/VuFind/RecordTab/StaffViewArray.php +++ b/module/VuFind/src/VuFind/RecordTab/StaffViewArray.php @@ -38,6 +38,14 @@ namespace VuFind\RecordTab; */ class StaffViewArray extends AbstractBase { + /** + * Constructor + */ + public function __construct() + { + $this->accessPermission = 'access.StaffViewTab'; + } + /** * Get the on-screen description for this tab. * diff --git a/module/VuFind/src/VuFind/RecordTab/StaffViewMARC.php b/module/VuFind/src/VuFind/RecordTab/StaffViewMARC.php index 575980955b5..61976130daf 100644 --- a/module/VuFind/src/VuFind/RecordTab/StaffViewMARC.php +++ b/module/VuFind/src/VuFind/RecordTab/StaffViewMARC.php @@ -38,6 +38,14 @@ namespace VuFind\RecordTab; */ class StaffViewMARC extends AbstractBase { + /** + * Constructor + */ + public function __construct() + { + $this->accessPermission = 'access.StaffViewTab'; + } + /** * Get the on-screen description for this tab. * diff --git a/module/VuFind/src/VuFind/Role/DynamicRoleProviderFactory.php b/module/VuFind/src/VuFind/Role/DynamicRoleProviderFactory.php index 6919369692e..bc3f99b7e91 100644 --- a/module/VuFind/src/VuFind/Role/DynamicRoleProviderFactory.php +++ b/module/VuFind/src/VuFind/Role/DynamicRoleProviderFactory.php @@ -135,6 +135,13 @@ class DynamicRoleProviderFactory implements FactoryInterface $permissions['legacy.AdminModule']['permission'] = 'access.AdminModule'; } + // Add staff view setting it they are absent: + if (!$this->permissionDefined($permissions, 'access.StaffViewTab')) { + $permissions['legacy.StaffViewTab']['role'] = ['guest', 'loggedin']; + $permissions['legacy.StaffViewTab']['permission'] + = 'access.StaffViewTab'; + } + // Add EIT settings if they are absent: if (!$this->permissionDefined($permissions, 'access.EITModule')) { $permissions['legacy.EITModule'] = [ -- GitLab