/** * Gets the form * * @param \Sonata\AdminBundle\Util\AdminObjectAclData $data * @return \Symfony\Component\Form\Form */ public function createForm(AdminObjectAclData $data) { // Retrieve object identity $objectIdentity = ObjectIdentity::fromDomainObject($data->getObject()); $acl = $data->getSecurityHandler()->getObjectAcl($objectIdentity); if (!$acl) { $acl = $data->getSecurityHandler()->createAcl($objectIdentity); } $data->setAcl($acl); $masks = $data->getMasks(); // Create a form to set ACL $formBuilder = $this->formFactory->createBuilder('form'); foreach ($data->getAclUsers() as $aclUser) { $securityIdentity = UserSecurityIdentity::fromAccount($aclUser); foreach ($data->getUserPermissions() as $permission) { try { $checked = $acl->isGranted(array($masks[$permission]), array($securityIdentity)); } catch (NoAceFoundException $e) { $checked = false; } $formBuilder->add($aclUser->getId() . $permission, 'checkbox', array('required' => false, 'data' => $checked)); } } $form = $formBuilder->getForm(); $data->setForm($form); return $form; }
/** * Builds the form. * * @param \Sonata\AdminBundle\Util\AdminObjectAclData $data * @param \Symfony\Component\Form\FormBuilderInterface $formBuilder * @param \Traversable $aclValues * * @return \Symfony\Component\Form\Form */ protected function buildForm(AdminObjectAclData $data, FormBuilderInterface $formBuilder, \Traversable $aclValues) { // Retrieve object identity $objectIdentity = ObjectIdentity::fromDomainObject($data->getObject()); $acl = $data->getSecurityHandler()->getObjectAcl($objectIdentity); if (!$acl) { $acl = $data->getSecurityHandler()->createAcl($objectIdentity); } $data->setAcl($acl); $masks = $data->getMasks(); $securityInformation = $data->getSecurityInformation(); foreach ($aclValues as $key => $aclValue) { $securityIdentity = $this->getSecurityIdentity($aclValue); $permissions = array(); foreach ($data->getUserPermissions() as $permission) { try { $checked = $acl->isGranted(array($masks[$permission]), array($securityIdentity)); } catch (NoAceFoundException $e) { $checked = false; } $attr = array(); if (self::ACL_ROLES_FORM_NAME === $formBuilder->getName() && isset($securityInformation[$aclValue]) && array_search($permission, $securityInformation[$aclValue]) !== false) { $attr['disabled'] = 'disabled'; } $permissions[$permission] = array('required' => false, 'data' => $checked, 'disabled' => array_key_exists('disabled', $attr), 'attr' => $attr); } $formBuilder->add($key, new AclMatrixType(), array('permissions' => $permissions, 'acl_value' => $aclValue)); } return $formBuilder->getForm(); }