Anda benar, mengamankan halaman dan mengamankan elemen berbeda.
Menurut pendapat saya dan dalam praktiknya, saya pikir mengikat kode apa pun ke peran atau pengguna sebenarnya adalah pendekatan yang salah. Sebagai gantinya, ikat izin ke elemen dan halaman - lalu ikat peran ke izin tersebut. Dan tentu saja, pengguna diberi peran.
Penting untuk memiliki ketiganya :
- Pengguna
- Peran
- Izin <-- ini yang Anda lewatkan
Izin adalah elemen dan laman yang aman, bukan peran atau pengguna Kode Anda seharusnya tidak memiliki petunjuk (karena tidak perlu) pengguna atau peran apa yang ada - hanya nama izin.
Saat pengguna masuk, saya mengambil peran mereka. Kemudian saya mengambil semua izin yang ditetapkan untuk peran tersebut (hanya daftar nilai string).
Misalnya, pada halaman saya mungkin memiliki :
- Tambahkan item
- Lihat item
- Hapus item
Ketika saya mengkode halaman itu, saya sebenarnya mengamankan setiap elemen tersebut dengan string izin bernama serupa ( addItem, viewItem, deleteItem).
<cfif listContainsNoCase( session.permissions, 'addItem' )>
<!--- code to add item --->
</cfif>
(Catatan:Saya sarankan menggunakan tag atau fungsi khusus untuk ini, tetapi untuk tujuan contoh, hal di atas berfungsi dengan baik).
Jika Anda melakukannya dengan cara ini, ini memberikan fleksibilitas dan abstraksi maksimum. Jika Anda mengamankan elemen berdasarkan peran, Anda membatasi diri Anda sendiri :
- Menambahkan peran baru akan membutuhkan banyak perubahan kode!
- Mengubah izin antar peran membutuhkan banyak perubahan kode!
Jika Anda melakukannya seperti yang disebutkan di atas, Anda tidak perlu mengubah kode keamanan Anda di dalam basis kode, karena izin "addItem" harus selalu pada logika "tambah item", bukan? :)
Sekarang jika Anda perlu membuat peran tipe "manajer", yang memiliki semua peran pengguna dan beberapa hak admin tertentu, Anda cukup membuat peran itu, dan menetapkannya izin yang benar (mungkin addItem dan editItem, tetapi tidak deleteItem) . Bam! Sekarang saya memiliki peran manajer untuk diberikan kepada pengguna dengan tanpa perubahan kode !
Jika saya telah menaburkan kode saya dengan jenis barang "adalah pengguna peran ini" - saya harus mengedit kode saya di mana-mana untuk mengizinkan peran baru saya "manajer" - yuck!
Masuk akal?
=)