48K Views

Symfony Sécurité Électeurs

Dans la sécurité des applications web est un problème grave, si votre demande n’est pas assez sécurisé qui peut créer un sérieux problème. Alors, comment nous pouvons garantir notre application est sécurisé? Il y a 2 conception de la sécurité de l’Authentification et de l’Autorisation.

de l’Authentification : Authentification est traitée lorsque vous utiliser vos informations d’identification (par exemple. nom d’utilisateur et mot de passe) pour vous connecter au système.

l’Autorisation : Après le processus d’authentification, l’application sait qui vous êtes. Mais pouvez-vous accéder à certaines ressources de l’application ou non de l’autorisation.

 

 

Symfony processus d’autorisation décide si oui ou non l’utilisateur actuel peut accéder à certaines URI, ou de modifier un certain objet. Il y a 2 façons (ACL et les Électeurs), mais les Électeurs est une solution facile pour effectuer ces restrictions.

Symfony Électeur est un mécanisme visant à assurer l’accès de l’utilisateur actuel pour certaines ressources. L’électeur est une classe qui contient des isGranted méthode où nous écrivons notre logique métier complexe qui décide que vous avez la permission ou de ne pas accéder à cette URI, ou d’un objet.

Tous les électeurs appelée à chaque fois que chaque fois que vous avez appelé isGranted méthode, vous pouvez également passer d’un objet à isGranted méthode comme deuxième argument et que l’argument va passer à l’électeur.

Nous allons créer un scénario pour une meilleure compréhension des électeurs, supposons qu’il y a un ticket avec le numéro d’identification de 1000, ce qui est attribué à Un Agent et l’Agent B est en train d’essayer d’accéder à ce billet, mais l’Agent B a pas la permission d’accéder à ce billet.

Afin de créer un électeur pour remédier à cette situation.

 

/**
* 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);

       // ...
   }
}

Au-dessus du contrôleur, nous vérifions si l’utilisateur peut accéder à ce billet en appelant le denyAccessUnlessGranted méthode de symfony Contrôleur de base de Symfony\Bundle\FrameworkBundle\Controller espace de noms. Méthode denyAccessUnlessGranted est plus simple isGranted méthode qui appelle isGranted méthode, et si l’utilisateur n’est pas autorisé, alors il crée un accès refusé d’exception (403 forbidden).

Créer un billet d’électeur où nous devons écrire notre logique de restreindre l’utilisateur à accéder à la billetterie.

 

/**
* 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; 
       } 
   } 
}

 

Dans isGranted méthode, nous renvoie true si l’utilisateur courant a accès et false sinon.

Pour faire de cet électeur de travail, vous devez configurer ce électeur dans votre service.fichier yml. Ci-dessous est le code pour la configuration de l’électeur:

 

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

 

C’est tout. Vous pouvez écrire votre propre logique d’entreprise en fonction de votre besoin.

Vous pouvez aussi vérifier Symfony Électeurs sur la documentation symfony http://symfony.com/doc/current/security/voters.html

Merci pour votre temps.

Category(s) uvdesk
. . .

Comment

Add Your Comment

Be the first to comment.

css.php