/** * Create a new resource and optionally privileges, menu item relationships and plugin dependency * @param $resourceName - unique identifier or resource key * @param array|null $privileges - optionally array [a,b,c] of new privileges * @param null $menuItemName - optionally s_core_menu.name item to link to this resource * @param null $pluginID - optionally pluginID that implements this resource * @throws Enlight_Exception */ public function createResource($resourceName,array $privileges = null,$menuItemName = null, $pluginID = null) { // Check if resource already exists if (!$this->hasResourceInDatabase($resourceName)) { $resource = new \Shopware\Models\User\Resource(); $resource->setName($resourceName); $resource->setPluginId($pluginID); Shopware()->Models()->persist($resource); Shopware()->Models()->flush(); if (!empty($privileges)) { foreach ($privileges as $privilege) { $this->createPrivilege($resource->getId(), $privilege); } } if (!empty($menuItemName)) { $this->databaseObject->query("UPDATE s_core_menu SET resourceID = ? WHERE name = ?",array($resource->getId(),$menuItemName)); } } else { throw new Enlight_Exception("Resource $resourceName already exists"); } }
private function createAclResource() { // If exists: find existing SwagImportExport resource $pluginId = $this->db->fetchRow('SELECT pluginID FROM s_core_acl_resources WHERE name = ? ', ["swagimportexport"]); $pluginId = isset($pluginId['pluginID']) ? $pluginId['pluginID'] : null; if ($pluginId) { // prevent creation of new acl resource return; } $resource = new \Shopware\Models\User\Resource(); $resource->setName('swagimportexport'); $resource->setPluginId($this->getId()); foreach (['export', 'import', 'profile', 'read'] as $action) { $privilege = new \Shopware\Models\User\Privilege(); $privilege->setResource($resource); $privilege->setName($action); $this->em->persist($privilege); } $this->em->persist($resource); $this->em->flush(); }