Blame | Letzte Änderung | Log anzeigen | RSS feed
<com:TContent ID="Main"><h1>Otentikasi dan Otorisasi</h1><p>Sebelum kita siap mengimplementasikan halaman pengguna, kita perlu melakukan beberapa pekerjaan guna menghidupkan <a href="http://www.pradosoft.com/demos/quickstart/index.php?page=Advanced.Auth">otentikasi dan otorisasi</a>.</p><p>Kita menambah dua modul ke konfigurasi aplikasi seperti berikut:</p><com:TTextHighlighter CssClass="source" Language="xml"><modules>...TDataSourceConfig and TActiveRecordConfig modules...<module id="auth"class="System.Security.TAuthManager"UserManager="users"LoginPage="users.LoginUser" /><module id="users"class="System.Security.TDbUserManager"UserClass="Application.BlogUser" /></modules></com:TTextHighlighter><p>Modul <a href="http://www.pradosoft.com/docs/classdoc/TAuthManager">TAuthManager</a> mengatur seluruh alur kerja otentikasi dan otorisasi. Ia menggunakan modul <tt>users</tt> sebagai manajer penggunanya (lihat di bawah). Dengan menetapkan properti <tt>LoginPage</tt>, kita menginformasikan manajer otentikasi untuk mengalihkan browser pengguna ke halaman <tt>LoginUser</tt> saat otorisasi gagal. Kami akan menjelaskan bagaimana untuk membuat <tt>LoginUser</tt> dalam subbagian berikutnya.</p><p>Modul <tt>user</tt> adalah kelas <a href="http://www.pradosoft.com/docs/classdoc/TDbUserManager">TDbUserManager</a> yang bertanggung jawab untuk memverifikasi keabsahan pengguna dan memelihara data dasar dalam sesi PHP. Properti <tt>UserClass</tt> diinisialisasi sebagai <tt>Application.BlogUser</tt>, yang menunjukan bahwa manajer pengguna akan melihar kelas <tt>BlogUser</tt> di bawah direktori <tt>protected</tt> (ingat alias <tt>Application</tt> merujuk ke direktori <tt>protected</tt>) dan menggunakannya untuk memelihara data sesi pengguna.</p><p>Seperti yang akan kita lihat dalam bagian nanti, dalam kontrol dan halaman, kita dapat menggunakan <tt>$this->User</tt> untuk memperoleh obyek <tt>BlogUser</tt> yang berisi informasi pengguna yang saat ini mengakses siistem.</p><p>Di bawah ini adalah rincian implementasi dari <tt>BlogUser</tt>. Perhatikan, <a href="http://www.pradosoft.com/demos/quickstart/index.php?page=Database.ActiveRecord">Rekaman Aktif</a> digunakan untuk melakukan query DB. Sebagai contoh, kita menggunakan <tt>UserRecord::finder()->findByPk($username)</tt> untuk mencari kunci primer yang ditetapkan oleh <tt>$username</tt> dalam tabel <tt>users</tt>.</p><com:TTextHighlighter CssClass="source" Language="php">// Sertakan file TDbUserManager.php yang mendefinisikan TDbUserPrado::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 tamureturn $user;}elsereturn 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');}}</com:TTextHighlighter></com:TContent>