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); // ... } } 12345678910111213141516171819202122232425 /*** 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; } } } 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 /*** 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 } 123456 # Resources/config/services.ymlservices: 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