Manajemen user merupakan salah satu fungsi inti dari CMS. Mesin harus tahu siapa yang diperbolehkan untuk mengedit dokumen, dan mesin juga membutuhkan cara untuk mengelola para pengguna.

Dibagian ini kita akan mendiskusikan beberapa poin berikut ini:

  • Meninjau manajemen pengguna
  • Apa itu Role/Peran dan bagaimana dia bekerja
  • Menyimpan data pengguna di database
  • Membuat sistem login
  • Menggunakan tool ReCaptcha
  • Manajemen password yang terlupakan
  • Membuat sistem manajemen pengguna

Kita akan membahas pokok-pokok manajemen peran, tapi kita tidak akan membahasnya terlalu dalam, karena untuk saat ini tidak ada fitur CMS yang kita bangun membutuhkannya.

Tipe pengguna

Aplikasi berevolusi dari script sederhana menjadi sistem yang kompleks, pengembang cenderung untuk menambahkan kode dan ide mereka saat muncul dan dibutuhkan.

Pada awalnya, saat membuat CMS sederhana, ini berarti akses pengguna terbatas pada login administrator, sebagai user login biasanya tidak diperlukan untuk sistem sederhana seperti pelaporan berita, atau galeri foto.

Jadi, pengembang menciptakan tabel administrator.

Kemudian, setelah sistem berevolusi, menjadi perlu untuk membuat pengguna front-end, sehingga orang dapat masuk dan memberikan komentar atau konten baru, atau membeli barang dengan diskon berbasis pengguna.

Sekali lagi, karena sistem ini perlahan-lahan berkembang, pengembang sekarang menambahkan tabel pengguna front-end.

Tapi beberapa hal kemudian menjadi kompleks. Bagaimana jika kita ingin administrator juga menjadi komentator, atau seseorang yang menggunakan sistem sebagai user biasa, tetapi juga seorang admin?

Salah satu solusi untuk ini adalah untuk memiliki satu tabel pengguna, dan penanda yang menyatakan apakah pengguna adalah user biasa atau admin.

Tapi kemudian, kita memiliki masalah lain. Bagaimana jika Anda ingin beberapa pengguna menjadi admin, tetapi Anda ingin mereka memiliki akses hanya untuk bagian-bagian tertentu dari wilayah backend? Sebagai contoh, katakanlah pengguna bertugas meng-upload berita. Ini berarti pengguna membutuhkan akses ke area admin, tetapi tidak harus memiliki akses ke, katakanlah, daerah manajemen pengguna.

Peran/Role

Solusinya tidak menggunakan penanda, tetapi menggunakan peran/role (juga disebut groups).Sebuah peran adalah sebuah group hak akses yang bisa kamu berikan kepada pengguna nantinya.

Sebagai contoh kamu mungkin memiliki peran sebagai “editor halaman”, yang memiliki hak akses sebagai berikut :

  • Bisa membuat halaman.
  • Bisa mengedit halaman.
  • Bisa menghapus halaman.

Kamu mungkin menginginkan seorang pengguna yang bisa mengedit halaman dan juga bisa mengedit produk toko online, dalam kasus ini kamu membutuhkan satu peran lainnya yang mencakup semua hak akses tersebut, atau membuat dua peran (“Editor Halaman” dan “Editor Toko Online”) dan pengguna menjadi member kedua peran tersebut.

Kasus terakhir, multi peran, lebih mudah untuk dikelola, dan pada kenyatannya hal ini diperlukan. Ketika jumlah kombinasi hak akses bertambah, lebih banyak peran akan dibuat.

Pertanyaan penting lainnya adalah, dimana nama peran ini dibuat? Apakah administrator bisa membuatnya? Ini adalah pertanyaan menarik, karena jawabannya adalah keduanya. “Ya” dan “Tidak”. Jika untuk membuat peran kamu membutuhkan untuk menjadi anggota dari peran administrator, kemudian siapa yang akan membuat peran “administrator”? Bagaimana jika nama peran itu dihapus?

Jadi kita punya kasus dimana nama peran seharusnya tidak dibuat oleh seorang administrator.

Di sisi lain, kita mungkin memiliki sebuah toko online, dan ingin menetapkan diskon 5% untuk semua pengguna yang menjadi anggota dari peran “pelanggan pilihan”. Siapa yang menciptakan peran itu? Masuk akal bahwa administrator harus diizinkan untuk membuat  banyak peran yang diperlukan. Dan tidak mungkin untuk aplikasi yang masuk akal akan dibuat yang memprediksi semua peran yang akan dibutuhkan oleh sistem.

Jadi kita punya kasus dimana nama peran harusnya bisa dibuat oleh administrator.

Dalam kasus ini, tidak mengapa jika admin menghapus peran yang terkait pelanggan, tapi tidak boleh nama peran “administrator” dihapus.

Bagaimana kita menyelesaikan permasalahan ini?

Salah satu solusi, yang akan kita gunakan adalah memberi awalan nama peran yang dihasilkan sistem dengan ‘_’, dan administrator dlarang mengedit atau membuat nama peran yang menggunakan skema itu.

Kita akan membuat dua peran sebagai permulaan :

  • _administrator, peran ini memberi pengguna hak akses untuk memasuki bagian admin dari sistem.
  • _superadministrator, Peran ini adalah peran yang spesial, yang memberi pengguna akses ke seluruh sistem.

Kami tidak akan membangun sistem manajemen peran disini, karena tidak ada bab lain yang akan memerlukannya. Kami sedang mendiskusikannya di sini karena lebih baik untuk mempersiapkan kebutuhan masa depan daripada tersandung kebutuhan tertentu dan harus menulis ulang banyak perilaku yang ditulis secara hardcoded.

Tabel Yang Diperlukan

Untuk merekam pengguna dalam database, kita perlu membuat tabel user_accounts, dan tabel groups untuk merekam peran (kelompok).

Pertama, ini adalah tabel user_accounts . Masukkan script berikut ini menggunakan phpMyAdmin, atau konsol mysql  :

CREATE TABLE `user_accounts` (
`id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT ,
`email` text,
`password` char(32) DEFAULT NULL,
`active` tinyint DEFAULT '0',
`groups` text,
`activation_key` varchar(32) DEFAULT NULL,
`extras` text,
PRIMARY KEY (`id`)
) DEFAULT CHARSET=utf8;

fig 2.1. Penjelasan tabel user_accounts

Perhatikan penggunaan JSON pada field groups (atau “kolom”, jika Anda lebih suka kata itu). Memutuskan apakah untuk sepenuhnya menormalkan database, atau apakah untuk menggabungkan beberapa nilai demi kecepatan, adalah keputusan yang sering harus dibuat.

 

Advertisements

About phpgeek programmer

pemimpi yang berharap menjadi the best programmer di zamannya

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s