48K Views

Symfony De Segurança Eleitores

Em segurança de aplicações web é uma preocupação séria, se sua aplicação não for suficiente para garantir que pode criar um problema sério. Então, como podemos assegurar que a nossa aplicação é segura? Há 2 projeto de segurança de Autenticação e Autorização.

Autenticação : Autenticação é processado quando você usar suas credenciais (por exemplo. nome de usuário e senha) para acessar o sistema.

Autorização : Após o processo de autenticação, a aplicação sabe quem vocês são. Mas você pode acessar determinados recursos do aplicativo, ou não, é a autorização.

Symfony processo de autorização decide se quer ou não o usuário atual pode acessar alguns URI, ou modificar um determinado objeto. Existem 2 maneiras de ACL (e Eleitores), mas os Eleitores é uma solução mais fácil para executar essas restrições.

Symfony de Eleitor é um mecanismo para fornecer acesso para o usuário atual para alguns recursos. O eleitor é uma classe que contém isGranted método onde escrevemos o nosso complexo de lógica de negócios que decide você tem permissão ou não para aceder a este URI, ou objeto.

Todos os eleitores, chamados a cada vez que sempre que você chamou o isGranted método, você também pode passar um objeto para o isGranted método como um segundo argumento e o argumento vai passar para o eleitor.

Vamos criar um cenário para o melhor entendimento dos eleitores, suponha que existe um ticket com o id #1000, que é atribuído ao Agente de Uma e o Agente B está tentando acessar esse bilhete, mas Agente B não tem permissão para acessar este bilhete.

Criar, assim, um eleitor para superar esta situação.

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

       // ...
   }
}

Acima controlador, vamos verificar se o usuário atual pode acessar este bilhete chamando o denyAccessUnlessGranted método do Symfony principal Controlador do Symfony\Bundle\FrameworkBundle\Controlador de espaço de nomes. Método denyAccessUnlessGranted é um simples isGranted método que chama o isGranted método e, se o usuário não está autorizado, em seguida, ele cria um acesso negado a exceção (403 proibido).

Criar um bilhete de eleitor, onde temos que escrever a nossa lógica para restringir o que o usuário acessar o bilhete.

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

No isGranted método, retorna true se o usuário atual tem acesso e false se não.

Para fazer este eleitor trabalho, é preciso configurar este eleitor em seu serviço.yml arquivo. Abaixo está o código para a configuração do eleitor:

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

É isso. Você pode escrever a sua própria lógica de negócios com base na sua necessidade.

Você também pode verificar o Symfony Eleitores sobre o symfony documentação http://symfony.com/doc/current/security/voters.html

Obrigado pelo seu tempo.

Category(s) uvdesk
. . .

Comment

Add Your Comment

Be the first to comment.

css.php