symfony3 autenticacion y autorizacion - simple in memory

in memory
es la mas simple: se trata de tener a los usuarios / con sus passwords (planos sin encriptar) y roles(categoria/grupo de usuarios que tendran algun acceso especifico dentreo de la aplicacion)  en un archivo de  configuracion (security.yml)


entonces, en security.yml:

security:
    encoders:
      Symfony\Component\Security\Core\User\User: plaintext
      #plaintext: password sin encriptacion
    providers:
        in_memory:
            memory:
              users:
                ibazan:
                  password: 123123
                  roles: ROLE_USER
                admin:
                  password: admin
                  roles: ROLE_ADMIN
    firewalls:
      main:
         form_login:
             login_path: auth.login
             check_path: auth.login
         logout:
              path: /logout
              target: /
    access_control:
        - { path: ^/prueba/admins, roles: ROLE_ADMIN }
        - { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/, roles: [ROLE_ADMIN,ROLE_USER] }
       


login_path: hace referencia al name del action que levanta la pagina de login
check_path: hace referencia al name del action que se dispara al querer checkear la autenticacion
logout: lo maneja symfony
access_control:
    es una manera de configurar los permisos a las paginas ^/ significa que las mismas deben tener     rutas que empiecen con...XXXX
hay que tener cuidado con el orden, por ejemplo,  si hubiesemos puesto path: ^/prueba/admins, roles: ROLE_ADMIN
al final de la lista, un usuario con con rol_user hubiese podido acceder ya que antes esta el path: ^/

ahora debemos crear el controller para el formulario login

src/AppBundle/Controller/AuthController.php:

class AuthController extends Controller
{
    /**
     * @Route("/login", name="auth.login")
     */
    public function loginAction(Request $request) {
        $authenticationUtils = $this->get('security.authentication_utils');
        $error = $authenticationUtils->getLastAuthenticationError();
        // obtiene un error si lo hubiese
       
        return $this->render('auth/login.html.twig', [
                'error' => $error,
         
        ]);
}

en la vista del login lo importante es que
el action del form apunte a este action y que sea del tipo post.
ademas lo campos de nombre de usuario se debe llamar _username y el de contraseña _password

<form action="{{ path('auth.login') }}" method="post">
           <div class="row">
             <div class="large-12 columns">
               <input type="text" name="_username" placeholder="Username" />
             </div>
           </div>
           <div class="row">
             <div class="large-12 columns">
               <input type="password" name="_password" placeholder="Password" />
             </div>
           </div>
           <div class="row">
             <div class="large-12 large-centered columns">
               <input type="submit" class="button expand" value="Log In"/>
             </div>
           </div>
         </form>



otra manera de dar acceso a los actions, es hacerlo en el mismo controller a traes de annotations

class PruebaController extends Controller{
/**
     * @Security("has_role('ROLE_USER')")
     *
     * @Route("/users", name="prueba_users")
     */
    public function usersAction() {
        //bla bla bla
    }
}



         



No hay comentarios:

Publicar un comentario

linux ubuntu mint actualizar chrome

 desde una terminal: $ sudo apt update $ sudo apt install google-chrome-stable