Tutorial ini adalah cara authentikasi pada website dan mengatur hak akses per folder per level user. Contoh ini menggunakan kode program yang saya gunakan dalam aplikasi saya. Mudahan bisa membantu semuanya agar lebih mengerti cara pembuatan authentikasi atau sistem login pada website.

  1. Sebelum memulai coding di Prado berikut adalah requirement atau kebutuhan dari sistem yang harus dibuat atau dilakukan:
    • Sistem login menggunakan database MySQL. Pada database terdapat tabel user yang menyimpan data user yang boleh menggunakan sistem ini. Tabel user minimal memiliki 3 kolom yaitu username, password, dan level. Tabel user menggunakan usernamae sebagai primary key. Untuk kolom level memiliki 2 default yaitu member dan admin. Level adalah hak akses dimana user pada suatu level hanya dapat mengakses folder yang dibolehkan.
    • Pada file konfigurasi aplikasi Prado yaitu file application.xml masukkan module database, auth manager, dan user. Berikut contoh dari file application.xml pada aplikasi saya:
      <?xml version="1.0" encoding="utf-8"?>
      <application id="Help Desk" mode="Debug">
      <paths>
      <alias id="page" path="pages" />
      <using namespace="page.*" />
      <using namespace="Application.modules.*"/>
      <using namespace="Application.database.*" />
      <using namespace="System.Web.UI.ActiveControls.*"/>
      </paths>
      <!-- modules configured and loaded for all services -->
      <modules>
      <module class="System.Data.ActiveRecord.TActiveRecordConfig" EnableCache="true">
      <database ConnectionString="mysql:host=localhost;dbname=test"
      Username="dbuser" Password="dbpass" />
      </module>
      <module id="auth"
      class="System.Security.TAuthManager"
      UserManager="users"
      LoginPage="login" />
      <module id="users"
      class="System.Security.TDbUserManager"
      UserClass="Application.dbuser" />
      </modules>
      <services>
      <!-- page service -->
      <service id="page" class="TPageService" BasePath="Application.pages" DefaultPage="home">
      <!-- modules configured and loaded when page service is requested -->
      <pages MasterClass="Application.layouts.mainlayout"/>
      </service>
      </services>
      </application>

      Pada contoh file diatas yang perlu diperhatikan adalah pada bagian module yang menyimpan settingan database dan authentikasi. Juga pada bagian path dimana terdapat settingan untuk untuk meload class active record pada folder database di folder protected aplikasi.

    • Pada folder database di dalam folder protected kita membuat file class UserRecord untuk menyimpan konfigurasi tabel user di database. Berikut adalah contoh dari file UserRecord:
      const TABLE='user';public $username;public $password;public $level;
      
      public static function finder($className=__CLASS__)
      
      {
      
      return parent::finder($className);
      
      }
      
      }
      
      ?>
    • File class dbuser yang akan menghandle login ke database yang diturunkan dari class TDbUserManager berikut contoh kode class dbuser
      * User Class mengatur data user yang disimpan di session*/class dbUser extends TDbUser{public function createUser($username)
      
      {
      
      // Gunakan Active Record pada tabel user untuk mencari primary key
      
      // username berdasarkan username yang di input
      
      // fungsi ini dipanggil bila login berhasil atau fungsi validate user dibawahnya menghasilkan nilai true
      
      $userRecord=UserRecord::finder()->findByPk($username);
      
      if($userRecord instanceof UserRecord) // if found
      
      {
      
      $user=new dbUser($this->Manager);
      
      $user->Name=$username;  // set username
      
      $user->Roles=$userRecord->level; // set role berdasarkan kolom level pada database tabel user
      
      $user->IsGuest=false;   // the user is not a guest
      
      return $user;
      
      }
      
      else
      
      return null;
      
      }
      
      /**
      
      * Fungsi pengecekan apakah input username dan password valid
      
      * Fungsi ini dipanggil dari halaman login
      
      * parameter string username
      
      * parameter string password
      
      * mengembalikan nilai boolean true bila user valid.
      
      */
      
      public function validateUser($username,$password)
      
      {
      
      // gunakan UserRecord Active Record untuk mengecek username dan password pada tabel user.
      
      return UserRecord::finder()->find('username = ? AND password = ?', array($username, $password))!==null;
      
      }
      
      /**
      
      * fungsi pengecekan level user adalah admin
      
      */
      
      public function getIsAdmin()
      
      {
      
      return $this->isInRole('admin');
      
      }
      
      /**
      
      * fungsi pengecekan level user adalah member
      
      */
      
      public function getIsMember(){
      
      return $this->isInRole('member');
      
      }
      
      }
      
      ?>

      Simpan kode di atas ke file dbuser.php dan tempatkan pada folder sesuai settingan pada file application.xml. Dari contoh saya karena saya mengeset lokasi file class dbuser di application yaitu folder protected maka saya menyimpannya pada folder protected di folder aplikasi yang saya buat. Penyimpanan password pada contoh menggunakan clear text untuk memudahkan pengertian. Disarankan untuk menggunakan hash pada password seperti MD5, SHA1, atau tipe hash lainnya.

    • Folder member dan admin yang diletakkan didalam folder page aplikasi Prado. Di dalam folder member dan admin kita membuat file dengan nama config.xml. File ini untuk mengatur hak akses ke dalam folder tersebut.Contohnya pada folder admin saya membuat file config.xml dengan isi sebagai berikut: File di atas hanya membolehkan folder tersebut diakses oleh user dengan level admin. Untuk folder member kita bisa menggunakan kode yang sama dengan mengganti allow roles menjadi member.
  2. Setelah file konfigurasi, database, dan class dbuser telah selesai maka kita tinggal membuat halaman login. Pada contoh yang saya gunakan saya menggunakan komponen active control sehingga halaman login saya menggunakan AJAX untuk verifikasi login. Anda tinggal mengganti dengan komponen standar yang bukan active control bila tidak ingin menggunakan feature AJAX. Halaman login memerlukan 2 file yaitu file template dan file controller PHP. Berikut adalah contoh file template halaman login:
    <com:TContent ID="right"><h3>Login</h3><p><com:TLabel  ID="txtLoginStatus"/> </p><table border="0" cellpadding="0" cellspacing="0"><tr>
    
    <td width="100px">User Name</td>
    
    <td>: <com:TTextBox  ID="txtUser"/>
    
    <com:TRequiredFieldValidator ControlToValidate="txtUser" ErrorMessage="Please provide your username." Display="Dynamic" />
    
    </td>
    
    </tr>
    
    <td>Password</td>
    
    <td>: <com:TTextBox ID="txtPass" TextMode="Password"/>
    
    </td>
    
    </table>
    
    <com:TButton ID="btnLogin" OnCommand="checkLogin" Text="Login"/>
    
    </com:TContent>

    Contoh diatas dengan asumsi bahwa pada file master template layout terdapat komponen TContentPlaceHolder dengan id right contohnya sebagai berikut:

    <com:tcontentplaceholder id="right"/>

    Pada kode template diatas terdapat komponen validator yang mengharuskan user untuk mengisi textbox txtUser, bila tidak pada saat form di submit maka akan dimunculkan error bahwa textbox txtUser harus diisi. Bila tidak ada kesalahan maka pada saat button Login di klik maka akan memanggil function checkLogin pada file controller PHP.

  3. Berikut merupakan contoh kode pada file controller PHP untuk memproses login:
    class login extends TPage{function checkLogin($sender,$param){
    
    $authManager=$this->Application->getModule('auth'); //memanggil module auth atau class dbuser // mengecek username dan password dengan memanggil function login// yang akan menjalankan function validateUser pada class dbuser yang telah kita buat sebelumnya.
    
    if($authManager->login($this->txtUser->Text,$this->txtPass->Text)) //if login success
    
    //masukkan fungsi disini untuk menghandle status bila login sukses
    
    if($this->user->isAdmin) //mengecek level user, bila admin maka di redirect ke halaman admin
    
    $this->response->Redirect('index.php?page=admin.home');
    
    else //bila bukan admin maka dianggap sebagai member dan di redirect ke halaman member
    
    $this->response->Redirect('index.php?page=member.home');
    
    else
    
    $this->txtLoginStatus->Text="Login Fail"; //masukkan fungsi disini untuk menghandle status bila login gagal
    
    }
    
    public function onLoad($param){
    
    parent::onLoad($param);
    
    //Check apakah sesi user masih aktif bila iya arahkan ke folder sesuai level user
    
    if(if($this->user->isMember)
    
    this->response->Redirect('index.php?page=member.home');
    
    else
    
    $this->response->Redirect('index.php?page=admin.home');
    
    }
    
    }
    
    ?>

    Contoh kode diatas akan memproses input username dan password dengan memanggil fungsi login yang juga menjalankan fungsi validateUser yang telah kita buat pada class dbUser. Bila sukses maka user akan didaftarkan pada session beserta level aksesnya kemudian akan diarahkan ke halaman yang telah ditentukan sesuai hak aksesnya.

Itulah tutorial authentikasi pada Prado. Contoh diatas hanya contoh sederhana. Masih bisa ditambahkan atau di modifikasi sesuai kebutuhan. Semoga contoh ini bisa membantu dan memperkenalkan Prado pada para programmer web Indonesia. This is Prado Way..

Popularity: 12% [?]