52K Views

Symfony Veiligheid Kiezers

In web application security is een ernstig probleem, als uw toepassing niet genoeg om veilig te kunnen maken met een ernstig probleem. Dus hoe kunnen wij onze applicatie is beveiligd? Er zijn 2 veiligheid ontwerp Authenticatie en Autorisatie.

Authenticatie : Authenticatie wordt verwerkt wanneer u uw referenties (bijv. gebruikersnaam en wachtwoord in om in te loggen op het systeem.

Authorisatie : Na het verificatie proces -, applicatie-weet wie je bent. Maar kunt u toegang tot bepaalde bronnen van de toepassing is of niet, is een machtiging.

 

 

Symfony autorisatie proces bepaalt of de huidige gebruiker toegang tot een aantal URI, of wijzigen van een bepaald object. Er zijn 2 manieren om de ACL (en Kiezers), maar de Kiezers is een makkelijker oplossing voor het uitvoeren van deze beperkingen.

Symfony Kiezer is een mechanisme om de toegang tot de huidige gebruiker voor bepaalde bronnen. De kiezer is een klasse waarin het isGranted methode waar we schrijven onze complexe business logica dat beslist u toestemming hebt of niet om toegang te krijgen tot deze URI, of het object.

Alle kiezers opgeroepen op elk moment genoemd isGranted methode, u kunt ook een object doorgeeft aan isGranted methode als een tweede argument en dat argument zal doorgeven aan de kiezer.

We maken een scenario voor een beter begrip van de kiezers, stel er is een kaartje met id #1000 die is toegewezen aan Een Agent en Agent B probeert toegang te krijgen tot dit ticket, maar Agent B heeft geen toestemming voor toegang tot dit ticket.

Dus maak een kiezer om deze situatie te overwinnen.

 

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

       // ...
   }
}

In de bovenstaande controller, controleren we of de huidige gebruiker toegang tot dit ticket door het aanroepen van de denyAccessUnlessGranted methode van symfony core Controller van Symfony\Bundel\FrameworkBundle\Controller naamruimte. Methode denyAccessUnlessGranted is een eenvoudiger isGranted methode die gesprekken isGranted methode en indien gebruiker niet toegestaan dan schept een toegang geweigerd uitzondering (403 forbidden).

Creëren van een ticket kiezer waar hebben we schrijven onze logica te beperken gebruiker om toegang te krijgen tot het ticket.

 

/**
* 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 methode, keren we terug waar als huidige gebruiker toegang heeft en false als dit niet.

Voor het maken van deze kiezer werken, moet u deze kiezer in uw dienst.yml bestand. Hieronder is de code voor de configuratie van de kiezer:

 

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

 

Dat is het. U kunt uw eigen business logica op basis van uw behoefte.

U kunt ook controleren Symfony Kiezers op symfony documentatie http://symfony.com/doc/current/security/voters.html

Bedankt voor uw tijd.

Category(s) uvdesk
. . .

Leave a Comment

Your email address will not be published. Required fields are marked*


Be the first to comment.

css.php