48K Views

Sicurezza Di Symfony Elettori

In sicurezza delle applicazioni web è un serio problema, se l’applicazione non è abbastanza per la sicurezza che può creare un problema serio. Quindi, come possiamo garantire la nostra applicazione è protetta? Ci sono 2 progetti per la sicurezza di Autenticazione e Autorizzazione.

Autenticazione : di Autenticazione viene elaborato quando si utilizza le tue credenziali (es. nome utente e password) per accedere al sistema.

Autorizzazione Dopo il processo di autenticazione, l’applicazione sa chi sei. Ma si può accedere ad alcune risorse dell’applicazione o non è l’autorizzazione.

 

 

Symfony processo di autorizzazione decide se l’utente corrente è possibile accedere ad alcune URI, o modificare un certo oggetto. Ci sono 2 modi (ACL e gli Elettori), ma gli Elettori è la soluzione più semplice per eseguire queste restrizioni.

Symfony Elettore è un meccanismo per fornire l’accesso per l’utente corrente per alcune risorse. L’elettore è una classe che contiene il metodo isGranted in cui scriviamo la nostra logica di business complessi che decide possesso di autorizzazione o di non accedere a questo URI, o di un oggetto.

Tutti gli elettori chiamati ogni volta ogni volta che si chiama isGranted metodo, è anche possibile passare un oggetto a isGranted metodo, come secondo argomento, e che l’argomento passerà all’elettore.

Proviamo a creare uno scenario per la migliore comprensione degli elettori, si supponga che c’è un biglietto con id #1000, che viene assegnato a Un Agente e l’Agente B sta cercando di accedere a questo biglietto, ma l’Agente B non dispone dell’autorizzazione per accedere a questo tipo di biglietto.

In modo da creare un elettore di superare questa situazione.

 

/**
* Webkul Software.
*
* @category Webkul
* @package Webkul_Uvdesk
* @author Webkul
* @copyright Copyright (c) 2010-2016 Webkul Software Private Limited (https://webkul.com)
* @license https://store.webkul.com/license.html
*/

// Webkul/UvdeskBundle/Controller/TicketController;

class TicketController extends Controller
{
    public function viewAction(Request $request)
    {
        // ...

       $ticket = $this->getDoctrine()->getRepository('UvdeskBundle:Ticket')->find($id);

       $this->denyAccessUnlessGranted('VIEW_TICKET',  $ticket);

       // ...
   }
}

Nel suddetto controller, si controlla se l’utente corrente è possibile accedere a questo biglietto chiamando il denyAccessUnlessGranted metodo di core di symfony Controller da Symfony\Bundle\FrameworkBundle\Controller spazio dei nomi. Metodo denyAccessUnlessGranted è un semplice metodo isGranted che chiama metodo isGranted e se l’utente non è autorizzato, si crea un accesso negato eccezione (403 forbidden).

Creare un biglietto elettore dove dobbiamo scrivere la nostra logica di limitare l’accesso il biglietto.

 

/**
* Webkul Software.
*
* @category Webkul
* @package Webkul_Uvdesk
* @author Webkul
* @copyright Copyright (c) 2010-2016 Webkul Software Private Limited (https://webkul.com)
* @license https://store.webkul.com/license.html
*/

// Webkul/UvdeskBundle/Security/TicketVoter;
class TicketVoter extends AbstractVoter
{

    private $attributesArray = array('VIEW_TICKET', 'DELETE_TICKET');

    protected function supports($attribute, $subject)
    {
        // check if attribute is supportive
        if (!in_array($attribute, $attributesArray) {
            return false;
        }

        // Vote on Ticket object
        if (!$subject instanceof Ticket) {
            return false;
        }

        return true;
    }

    protected function getSupportedClasses()
    {
        return array('Webkul\UvdeskBundle\Entity\Ticket');
    }

    protected function getSupportedAttributes()
    {
        return $this->attributesArray;
    } 

    protected function isGranted($attribute, $ticket, $user = null) { 
       $user = $token->getUser(); 
       if (!$user instanceof User) { 
          return false; 
       } 

       switch ($attribute) { 
          case 'VIEW_TICKET': 
             if($user->getRole() == 'ROLE_ADMIN' || $user == $ticket->getAgent()) 
                return true; 
             return false; 
          case 'DELETE_TICKET': 
             if($user->getRole() == 'ROLE_ADMIN') 
                return true; 
             return false; 
       } 
   } 
}

 

In isGranted metodo, si ritorna true se l’utente ha accesso e false in caso contrario.

Per fare questo elettore di lavoro, è necessario configurare questo elettore nel vostro servizio.file yml. Di seguito è riportato il codice per la configurazione dell’elettore:

 

# Resources/config/services.yml
services:
   uvdesk.ticket_voter:
        class: Uvdesk\Security\TicketVoter
        tags:
            - { name: security.voter }

 

. È possibile scrivere la logica di business in base alle proprie esigenze.

È inoltre possibile controllare Symfony Elettori su symfony documentazione http://symfony.com/doc/current/security/voters.html

Grazie per il vostro tempo.

Category(s) uvdesk
. . .

Comment

Add Your Comment

Be the first to comment.

css.php