Otentikasi dan Otorisasi
Sebelum kita siap mengimplementasikan halaman pengguna, kita perlu melakukan beberapa pekerjaan guna menghidupkan otentikasi dan otorisasi.
Kita menambah dua modul ke konfigurasi aplikasi seperti berikut:
...TDataSourceConfig and TActiveRecordConfig modules...
Modul TAuthManager mengatur seluruh alur kerja otentikasi dan otorisasi. Ia menggunakan modul users sebagai manajer penggunanya (lihat di bawah). Dengan menetapkan properti LoginPage, kita menginformasikan manajer otentikasi untuk mengalihkan browser pengguna ke halaman LoginUser saat otorisasi gagal. Kami akan menjelaskan bagaimana untuk membuat LoginUser dalam subbagian berikutnya.
Modul user adalah kelas TDbUserManager yang bertanggung jawab untuk memverifikasi keabsahan pengguna dan memelihara data dasar dalam sesi PHP. Properti UserClass diinisialisasi sebagai Application.BlogUser, yang menunjukan bahwa manajer pengguna akan melihar kelas BlogUser di bawah direktori protected (ingat alias Application merujuk ke direktori protected) dan menggunakannya untuk memelihara data sesi pengguna.
Seperti yang akan kita lihat dalam bagian nanti, dalam kontrol dan halaman, kita dapat menggunakan $this->User untuk memperoleh obyek BlogUser yang berisi informasi pengguna yang saat ini mengakses siistem.
Di bawah ini adalah rincian implementasi dari BlogUser. Perhatikan, Rekaman Aktif digunakan untuk melakukan query DB. Sebagai contoh, kita menggunakan UserRecord::finder()->findByPk($username) untuk mencari kunci primer yang ditetapkan oleh $username dalam tabel users.
// Sertakan file TDbUserManager.php yang mendefinisikan TDbUser
Prado::using('System.Security.TDbUserManager');
/**
* BlogUser Class.
* BlogUser mewakili data pengguna yang perlu dijaga dalam sesi.
* Implementasi standar memelihara informasi aturan dan pengguna.
*/
class BlogUser extends TDbUser
{
/**
* Membuat obyek BlogUser berdasarkan username yang ditetapkan.
* Metode ini diperlukan oleh TDbUser. Ia memeriksa database
* untuk melihat apakah username yang ditetapkan ada di sana. Jika ada,
* obyek BlogUser dibuat dan diinisialisasi.
* @param string username yang ditetapkan
* @return BlogUser obyek pengguna, null jika username tidak benar.
*/
public function createUser($username)
{
// gunakan Rekaman Aktif UserRecord untuk mencari username yang ditetapkan
$userRecord=UserRecord::finder()->findByPk($username);
if($userRecord instanceof UserRecord) // jika ditemukan
{
$user=new BlogUser($this->Manager);
$user->Name=$username; // setel nama pengguna
$user->Roles=($userRecord->role==1?'admin':'user'); // setel aturan
$user->IsGuest=false; // pengguna bukan seorang tamu
return $user;
}
else
return null;
}
/**
* Memeriksa apakah (username, password) yang ditetapkan sudah benar.
* Metode ini diperlukan oleh TDbUser.
* @param string username
* @param string password
* @return boolean apakah username dan password sudah benar.
*/
public function validateUser($username,$password)
{
// pakai Rekaman Aktif UserRecord untuk mencari pasangan (username, password).
return UserRecord::finder()->findBy_username_AND_password($username,$password)!==null;
}
/**
* @return boolean apakah pengguna ini adalah seorang administrator.
*/
public function getIsAdmin()
{
return $this->isInRole('admin');
}
}