addRoleAssignment($roles, ['manage']); parent::__construct($roles); } // // Extended methods from PluginGridHandler // /** * @copydoc PluginGridHandler::loadCategoryData() * * @param null|mixed $filter */ public function loadCategoryData($request, &$categoryDataElement, $filter = null) { $plugins = parent::loadCategoryData($request, $categoryDataElement, $filter); $userRoles = $this->getAuthorizedContextObject(Application::ASSOC_TYPE_USER_ROLES); $showSitePlugins = false; if (in_array(Role::ROLE_ID_SITE_ADMIN, $userRoles)) { $showSitePlugins = true; } if ($showSitePlugins) { return $plugins; } else { $contextLevelPlugins = []; foreach ($plugins as $plugin) { if (!$plugin->isSitePlugin()) { $contextLevelPlugins[$plugin->getName()] = $plugin; } unset($plugin); } return $contextLevelPlugins; } } // // Overridden template methods. // /** * @copydoc CategoryGridHandler::getCategoryRowInstance() */ protected function getRowInstance() { return new PluginGridRow($this->getAuthorizedContextObject(Application::ASSOC_TYPE_USER_ROLES)); } /** * @copydoc GridHandler::authorize() */ public function authorize($request, &$args, $roleAssignments) { $categoryName = $request->getUserVar('category'); $pluginName = $request->getUserVar('plugin'); if ($categoryName && $pluginName) { switch ($request->getRequestedOp()) { case 'enable': case 'disable': case 'manage': $accessMode = PluginAccessPolicy::ACCESS_MODE_MANAGE; break; default: $accessMode = PluginAccessPolicy::ACCESS_MODE_ADMIN; break; } $this->addPolicy(new PluginAccessPolicy($request, $args, $roleAssignments, $accessMode)); } else { $this->addPolicy(new ContextAccessPolicy($request, $roleAssignments)); } return parent::authorize($request, $args, $roleAssignments); } }