Created
June 9, 2016 15:45
-
-
Save iBasit/f97ede55aa9f7a7fe5620bd322149c06 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Returns the Response object associated to the acl action. | |
* | |
* @param int|string|null $id | |
* @param Request $request | |
* | |
* @return Response|RedirectResponse | |
* | |
* @throws AccessDeniedException If access is not granted. | |
* @throws NotFoundHttpException If the object does not exist or the ACL is not enabled | |
*/ | |
public function aclAction($id = null) | |
{ | |
$request = $this->getRequest(); | |
if (!$this->admin->isAclEnabled()) { | |
throw $this->createNotFoundException('ACL are not enabled for this admin'); | |
} | |
$id = $request->get($this->admin->getIdParameter()); | |
$object = $this->admin->getObject($id); | |
if (!$object) { | |
throw $this->createNotFoundException(sprintf('unable to find the object with id : %s', $id)); | |
} | |
$this->admin->checkAccess('acl', $object); | |
$this->admin->setSubject($object); | |
$aclUsers = $this->getAclUsers(); | |
$aclRoles = $this->getAclRoles(); | |
$adminObjectAclManipulator = $this->get('sonata.admin.object.manipulator.acl.admin'); | |
$adminObjectAclData = new AdminObjectAclData( | |
$this->admin, | |
$object, | |
$aclUsers, | |
$adminObjectAclManipulator->getMaskBuilderClass(), | |
$aclRoles | |
); | |
$aclUsersForm = $adminObjectAclManipulator->createAclUsersForm($adminObjectAclData); | |
$aclRolesForm = $adminObjectAclManipulator->createAclRolesForm($adminObjectAclData); | |
if ($request->getMethod() === 'POST') { | |
if ($request->request->has(AdminObjectAclManipulator::ACL_USERS_FORM_NAME)) { | |
$form = $aclUsersForm; | |
$updateMethod = 'updateAclUsers'; | |
} elseif ($request->request->has(AdminObjectAclManipulator::ACL_ROLES_FORM_NAME)) { | |
$form = $aclRolesForm; | |
$updateMethod = 'updateAclRoles'; | |
} | |
if (isset($form)) { | |
$form->handleRequest($request); | |
if ($form->isValid()) { | |
$adminObjectAclManipulator->$updateMethod($adminObjectAclData); | |
$this->addFlash('sonata_flash_success', 'flash_acl_edit_success'); | |
return new RedirectResponse($this->admin->generateObjectUrl('acl', $object)); | |
} | |
} | |
} | |
return $this->render($this->admin->getTemplate('acl'), array( | |
'action' => 'acl', | |
'permissions' => $adminObjectAclData->getUserPermissions(), | |
'object' => $object, | |
'users' => $aclUsers, | |
'roles' => $aclRoles, | |
'aclUsersForm' => $aclUsersForm->createView(), | |
'aclRolesForm' => $aclRolesForm->createView(), | |
), null, $request); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment