Subversion-Projekte lars-tiefland.prado

Revision

Details | Letzte Änderung | Log anzeigen | RSS feed

Revision Autor Zeilennr. Zeile
1 lars 1
<com:TContent ID="Main">
2
 
3
<h1>Otentikasi dan Otorisasi</h1>
4
 
5
<p>
6
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>.
7
</p>
8
 
9
<p>
10
Kita menambah dua modul ke konfigurasi aplikasi seperti berikut:
11
</p>
12
 
13
<com:TTextHighlighter CssClass="source" Language="xml">
14
<modules>
15
    ...TDataSourceConfig and TActiveRecordConfig modules...
16
 
17
    <module id="auth"
18
      class="System.Security.TAuthManager"
19
      UserManager="users"
20
      LoginPage="users.LoginUser" />
21
 
22
    <module id="users"
23
      class="System.Security.TDbUserManager"
24
      UserClass="Application.BlogUser" />
25
</modules>
26
</com:TTextHighlighter>
27
 
28
<p>
29
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.
30
</p>
31
 
32
<p>
33
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.
34
</p>
35
 
36
<p>
37
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.
38
</p>
39
 
40
<p>
41
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>.
42
</p>
43
 
44
<com:TTextHighlighter CssClass="source" Language="php">
45
// Sertakan file TDbUserManager.php yang mendefinisikan TDbUser
46
Prado::using('System.Security.TDbUserManager');
47
 
48
/**
49
 * BlogUser Class.
50
 * BlogUser mewakili data pengguna yang perlu dijaga dalam sesi.
51
 * Implementasi standar memelihara informasi aturan dan pengguna.
52
 */
53
class BlogUser extends TDbUser
54
{
55
    /**
56
     * Membuat obyek BlogUser berdasarkan username yang ditetapkan.
57
     * Metode ini diperlukan oleh TDbUser. Ia memeriksa database
58
     * untuk melihat apakah username yang ditetapkan ada di sana. Jika ada,
59
     * obyek BlogUser dibuat dan diinisialisasi.
60
     * @param string username yang ditetapkan
61
     * @return BlogUser obyek pengguna, null jika username tidak benar.
62
     */
63
    public function createUser($username)
64
    {
65
        // gunakan Rekaman Aktif UserRecord untuk mencari username yang ditetapkan
66
        $userRecord=UserRecord::finder()->findByPk($username);
67
        if($userRecord instanceof UserRecord) // jika ditemukan
68
        {
69
            $user=new BlogUser($this->Manager);
70
            $user->Name=$username;  // setel nama pengguna
71
            $user->Roles=($userRecord->role==1?'admin':'user'); // setel aturan
72
            $user->IsGuest=false;   // pengguna bukan seorang tamu
73
            return $user;
74
        }
75
        else
76
            return null;
77
    }
78
 
79
    /**
80
     * Memeriksa apakah (username, password) yang ditetapkan sudah benar.
81
     * Metode ini diperlukan oleh TDbUser.
82
     * @param string username
83
     * @param string password
84
     * @return boolean apakah username dan password sudah benar.
85
     */
86
    public function validateUser($username,$password)
87
    {
88
        // pakai Rekaman Aktif UserRecord untuk mencari pasangan (username, password).
89
        return UserRecord::finder()->findBy_username_AND_password($username,$password)!==null;
90
    }
91
 
92
    /**
93
     * @return boolean apakah pengguna ini adalah seorang administrator.
94
     */
95
    public function getIsAdmin()
96
    {
97
        return $this->isInRole('admin');
98
    }
99
}
100
</com:TTextHighlighter>
101
 
102
</com:TContent>