Thursday, March 5, 2015

Symfony 2 hari 20: Hak akses user

Artikel ini dirunut berdasarkan Jobeet Tutorial, yang dibuat oleh Fabien Potencier, untuk Symfony 1.4.

Hak akses pengguna

Pada saat authentifikasi bisanya user akan memasukan username dan password, kemudian jika user berhasil masuk maka sistem akan memberikan hak akses berdasarkan status hak akses yang dimiliki oleh user. Di Symfony 2 kita bisa melakukan pengaturan hak akses melalui data dari database atau melalui konfigurasi file. Nah untuk kali ini kita akan menggunakan setting authentifikasi melalui konfigurasi di file. Pertama seting spesifikasi user di file config/security.yml

app/config/security.yml

# ...

providers:
    in_memory:
        memory:
            users:
                admin: { password: adminpass, roles: 'ROLE_ADMIN' }

# ...

====================================

Tetapi kamu juga dapat meletakan data user di dalam tabel user. Untuk itu mari kita buat table user terlebih dahulu:

src/Ibw/JobeetBundle/Resources/config/doctrine/User.orm.yml

Ibw\JobeetBundle\Entity\User:
    type: entity
    table: user
    id:
        id:
            type: integer
            generator: { strategy: AUTO }
    fields:
        username:
            type: string
            length: 255
        password:
            type: string
            length: 255 
 
 
===========================================

Kemudian jalankan perintah berikut untuk menggenerate tablenya.

php app/console doctrine:generate:entities IbwJobeetBundle
Lakukan update schema di aplikasi kita dengan menjalankan perintah berikut:
php app/console doctrine:schema:update --force
Selanjutnya kita perlu menambahkan user interface untuk melakukan authentifikasi di aplikasi kita, buka model User lalu tambahkan kode berikut:


src/Ibw/JobeetBundle/Entity/User.php
namespace Ibw\JobeetBundle\Entity;

use Symfony\Component\Security\Core\User\UserInterface;
use Doctrine\ORM\Mapping as ORM;

/**
* User
*/
class User implements UserInterface
{
    /**
     * @var integer
     */
    private $id;

    /**
     * @var string
     */
    private $username;

    /**
     * @var string
     */
    private $password;

    /**
     * Get id
     *
     * @return integer
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * Set username
     *
     * @param string $username
     * @return User
     */
    public function setUsername($username)
    {
        $this->username = $username;

    }

    /**
     * Get username
     *
     * @return string
     */
    public function getUsername()
    {
        return $this->username;
    }

    /**
     * Set password
     *
     * @param string $password
     * @return User
     */
    public function setPassword($password)
    {
        $this->password = $password;

    }

    /**
     * Get password
     *
     * @return string
     */
    public function getPassword()
    {
        return $this->password;
    }

    public function getRoles()
    {
        return array('ROLE_ADMIN');
    }

    public function getSalt()
    {
        return null;
    }

    public function eraseCredentials()
    {

    }

    public function equals(User $user)
    {
        return $user->getUsername() == $this->getUsername();
    }       
}
====================================
Kemudian set User provider ke model User tersebut:
app/config/security.yml
...

    providers:
        main:
            entity: { class: Ibw\JobeetBundle\Entity\User, property: username }

    encoders:
        Ibw\JobeetBundle\Entity\User: sha512
=============================
Kita juga mengeset pengkodean user dengan menggunakan algoritma Sha512 untuk mengecrypt password kita.

No comments:

Post a Comment