summaryrefslogtreecommitdiff
path: root/demos/blog-tutorial/protected/pages/Day3/id/Auth.page
blob: c4728cdf08c593b559efae24649638d5a8f373cd (plain)
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>