गतिशील रूप से Symfony2 मार्ग की समीक्षा करें

हैलो मुझे मार्ग प्राप्त करने और समीक्षा करने की आवश्यकता है अगर इसकी पहुंच हो, डेटाबेस पर समीक्षा हो लेकिन एक स्तर वास्तव में अमूर्त और स्वचालित हो। अब तक मैं इसे इस फॉर्म पर बना रहा हूं:

$accesos = MenuQuery::create()
            ->useAccesoMenuQuery()
            ->usePerfilQuery()
            ->usePerfilUsuarioQuery()
            ->filterByUsuarioId($this->getUser()->getId())
            ->endUse()
            ->endUse()
            ->endUse()
            ->orderBy('menu.orden')
            ->groupBy('menu.id')
            ->find();
    $permiso = false;
    foreach ($accesos as $acceso) {
        if (($acceso->getDireccion() == $ruta) || ($permiso)) {
            $permiso = true;
            break;
        }
    }
    return $permiso;
}

मैं इसे बनाने के लिए इस PHP फ़ंक्शन का उपयोग कर रहा हूं। लेकिन मुझे इसे symfony2 या किसी अन्य रूप की फ़ायरवॉल पर बनाने की जरूरत है लेकिन सार।

0

2 उत्तर

जिस फॉर्म को मैंने किया वह सिमफ़ोन 2 के इवेंट श्रोता का उपयोग कर रहा था, यहां मैं अपना कोड भेजता हूं।

use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
class SoporteListener {

private $container;
private $acceso = 0;

public function __construct(ContainerInterface $container) {
    $this->container = $container;
}

public function onKernelRequest(GetResponseEvent $event) {
    $request = $this->container->get('request');
    $routeName = $request->get('_route');
    $securityContext = $this->container->get('security.context');
    if (($securityContext->isGranted('ROLE_USUARIO')) && 
            ($routeName != 'done_login') &&
            ($routeName != 'done_logout')) {
        $usuario = $this->container->get('security.context')->getToken()->getUser();
        $permisos = MenuQuery::create()
                ->useAccesoMenuQuery()
                ->usePerfilQuery()
                ->usePerfilUsuarioQuery()
                ->filterByUsuarioId($usuario->getId())
                ->endUse()
                ->endUse()
                ->endUse()
                ->groupBy('menu.id')
                ->find();
        foreach ($permisos as $permiso) {
            if (($permiso->getDireccion() == $routeName)) {
                $this->acceso = 1;
                break;
            }
        }
        if ($this->acceso == 0) {
            $event->setResponse($this->container->get('templating')->renderResponse('::error.html.twig', array('error' => 'Permiso denegado')));
        } else {
            return;    
        }
    } else {
        return;
    }
}

}

0
जोड़ा

एक तरफ, और यदि मार्ग सामान्य हैं, तो सुरक्षा.आईसीएल में एसीएल सेट करें जहां आप निर्दिष्ट कर सकते हैं कि उदाहरण के लिए ^/admin /.* को ROLE_ADMIN की आवश्यकता है। यदि आपके पास विशेष भूमिकाएं हैं, उदाहरण के लिए, ACCOUNT_ADMIN जहां यह चयनित खाता क्या है, इस पर निर्भर करता है, तो आपको अपना स्वयं का मतदाता लिखना होगा, जहां आप यह तय कर सकते हैं कि एक विशिष्ट बिंदु पर, अधिकार पर्याप्त हैं या नहीं।

0
जोड़ा