Простой админ-пакет и переписывание URL для контроля доступа

Я использую Easy Admin Bundle для Symfony 2, и у меня проблема с настройкой ACL в security.yml. Он не учитывает параметры URL, поэтому мне нужно переписать URL.

Текущий:

.../admin/?entity=User&action=list&menuIndex=0&submenuIndex=-1

Вот что мне нужно:

.../admin/User/?action=list&menuIndex=0&submenuIndex=-1

После этого легко настроить ACL из:

access_control:
- { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/admin/, role: ROLE_ADMIN }

Для чего-то вроде:

access_control:
- { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/admin/files/, role: ROLE_USER }
- { path: ^/admin/user/, role: ROLE_ADMIN }

Или же:

access_control:
- { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/admin/, role: ROLE_USER }
- { path: ^/files/, role: ROLE_USER }
- { path: ^/user/, role: ROLE_ADMIN }

Или, может быть, есть другой подход?

0

Решение

Хорошо, вот решение:

https://github.com/javiereguiluz/EasyAdminBundle/issues/1076

Просто отредактируйте ваш config.yml, как в примере:

BlogEntry:
class: AppBundle\Entity\BlogEntry
permissions:
list:  ['ROLE_ADMIN', 'ROLE_EDITOR']
create:  ['ROLE_ADMIN']
edit:  ['ROLE_ADMIN', 'ROLE_EDITOR']
delete:  ['ROLE_ADMIN']

Затем перезапишите EasyAdmin AdminController и перезапишите метод indexAction:

namespace AppBundle\Controller;

use JavierEguiluz\Bundle\EasyAdminBundle\Controller\AdminController as EasyAdminController;

class AdminController extends EasyAdminController
{
/**
* @Route("/", name="easyadmin")
*
* @param Request $request
*
* @return RedirectResponse|Response
*/
public function indexAction(Request $request)
{
$this->initialize($request);

if (null === $request->query->get('entity')) {
return $this->redirectToBackendHomepage();
}

$action = $request->query->get('action', 'list');
if (!$this->isActionAllowed($action)) {
throw new ForbiddenActionException(array('action' => $action, 'entity' => $this->entity['name']));
}

if (isset($this->entity['permissions'][$action])) {
$this->denyAccessUnlessGranted($this->entity['permissions'][$action]);
}

return $this->executeDynamicMethod($action.'<EntityName>Action');
}
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]