/** * * Done * @return ViewModel */ public function createAction() { $request = $this->getRequest(); $entityManager = $this->getEntityManager(); $roles = $entityManager->getRepository('Authorization\\Entity\\Role')->findAll(); $formRoles = []; foreach ($roles as $role) { $formRoles[$role->getRoleId()] = $role->getRoleName(); } $roleForm = new RoleForm($formRoles); if ($request->isPost()) { $data = $request->getPost(); $roleForm->setInputFilter(new RoleFilter()); $roleForm->setData($data); if ($roleForm->isValid()) { $data = $roleForm->getData(); $role = new EntityRole(); $role->setRoleName($data['role_name']); $parents = new ArrayCollection(); foreach ($data['role_parent'] as $parentRoleId) { $parents->add($entityManager->getReference('Authorization\\Entity\\Role', $parentRoleId)); } $role->addParents($parents); try { $entityManager->persist($role); $entityManager->flush(); $this->redirect()->toRoute('authorization/role', array('action' => 'index')); } catch (Exception $ex) { return new ViewModel(array('message' => $ex->getCode() . ': ' . $ex->getMessage())); } } } return new ViewModel(array('roleForm' => $roleForm)); }
/** * Apesar de não intuitivo este método define quem serão os ancestrais de $role. * * Durante a edição de um novo cargo este método insere todas os papéis dos quais o papel correspondente ao cargo * será herdeiro (herdará previlégios). Se o papel já possui herança com um dos papéis do vetor ele é ignorado. * * @param Collection $roles * @return Self */ public function addParentRoles(Collection $roles) { $currentRoles = $this->role->getParents(); $remove = new ArrayCollection(); $add = new ArrayCollection(); foreach ($roles as $r) { if (!$currentRoles->contains($r)) { $add->add($r); } } foreach ($currentRoles as $r) { if (!$roles->contains($r)) { $remove->add($r); } } $this->role->removeParents($remove); $this->role->addParents($add); return $this; }