/** * {@inheritDoc} */ public function load(ObjectManager $manager) { $refs = $this->referenceRepository->getReferences(); $orgRefNames = []; $deptRefNames = []; $linkRefNames = []; foreach ($refs as $ref) { $refNames = $this->referenceRepository->getReferenceNames($ref); if (is_a($ref, 'AppBundle\\Entity\\Department')) { $deptRefNames[] = $refNames[0]; } if (is_a($ref, 'AppBundle\\Entity\\MenuLink')) { $linkRefNames[] = $refNames[0]; } } $items = []; foreach ($deptRefNames as $deptRefName) { $i = 1; $department = $this->getReference($deptRefName); foreach ($linkRefNames as $linkRefName) { $item = new MenuItem(); $item->isActive(true); $item->setPosition($i); $item->setMenuLink($this->getReference($linkRefName)); $item->setOrganization($department->getOffice()->getOrganization()); if (in_array($linkRefName, ['inventoryAuditLink', 'inventoryActionLink', 'inventoryLogLink'])) { $item->setParent($items[$deptRefName]['mainLink']); } else { if (in_array($linkRefName, ['adminInventoryLink', 'adminAccountingLink'])) { $item->setParent($items[$deptRefName]['adminLink']); } else { $item->setDepartment($department); } } $manager->persist($item); $items[$deptRefName][$linkRefName] = $item; $i++; } } $manager->flush(); $aclProvider = $this->container->get('security.acl.provider'); $devRoleSecurityIdentity = new RoleSecurityIdentity('ROLE_DEV'); $adminRoleSecurityIdentity = new RoleSecurityIdentity('ROLE_ADMIN'); $leadRoleSecurityIdentity = new RoleSecurityIdentity('ROLE_LEAD'); $userRoleSecurityIdentity = new RoleSecurityIdentity('ROLE_USER'); foreach ($items as $deptItems) { foreach ($deptItems as $item) { $objectIdentity = ObjectIdentity::fromDomainObject($item); $acl = $aclProvider->createAcl($objectIdentity); $acl->insertObjectAce($userRoleSecurityIdentity, MaskBuilder::MASK_VIEW); $acl->insertObjectAce($adminRoleSecurityIdentity, MaskBuilder::MASK_OPERATOR); $aclProvider->updateAcl($acl); } } }
/** * Add child * * @param \AppBundle\Entity\MenuItem $menuItem * @return Department */ public function addChild(MenuItem $child) { $this->children[] = $child; $child->setParent($this); return $this; }