Skip to content

Instantly share code, notes, and snippets.

@iBasit
Created June 9, 2016 15:45
Show Gist options
  • Save iBasit/f97ede55aa9f7a7fe5620bd322149c06 to your computer and use it in GitHub Desktop.
Save iBasit/f97ede55aa9f7a7fe5620bd322149c06 to your computer and use it in GitHub Desktop.
/**
* 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