1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
|
<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 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');
}
}
</com:TTextHighlighter>
</com:TContent>
|