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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
/** * 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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
/** * 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:
1 2 3 4 5 6 |
# 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.