Menanggapi pertanyaan pertama Anda, masalah terbesar dengan memeriksa bahwa pengguna memiliki peran daripada izin tertentu, adalah bahwa izin dapat dipegang oleh beberapa peran. Sebagai contohnya, pengembang mungkin memiliki akses untuk melihat portal pengembang di intranet perusahaan, yang mungkin juga merupakan izin yang dimiliki oleh manajer mereka. Jika pengguna kemudian mencoba mengakses portal pengembang, Anda akan memiliki cek yang mirip dengan:
if(SecurityUtils.hasRole(developer)) {
// Grant them access to a feature
} else if(SecurityUtils.hasRole(manager)) {
// Grant them access to a feature
} else if...
( switch
Pernyataan dalam bahasa pilihan Anda akan lebih baik, tetapi masih tidak terlalu rapi)
Semakin umum atau banyak dipegang izin, semakin banyak peran pengguna yang perlu Anda periksa untuk memastikan bahwa seseorang dapat mengakses sistem yang diberikan. Ini juga akan mengarah pada masalah bahwa setiap kali Anda memodifikasi izin untuk peran, Anda perlu memodifikasi cek untuk mencerminkan hal ini. Dalam sistem besar ini akan menjadi sangat berat dengan sangat cepat.
Jika Anda hanya memeriksa bahwa pengguna memiliki izin yang memungkinkan mereka mengakses portal pengembang misalnya, tidak masalah peran apa yang mereka miliki, mereka akan diberikan akses.
Untuk menjawab pertanyaan kedua Anda, alasan Anda memiliki peran adalah karena mereka bertindak semudah memodifikasi dan mendistribusikan "paket" izin. Jika Anda memiliki sistem yang memiliki ratusan peran dan ribuan izin, menambahkan pengguna baru (misalnya manajer SDM baru) akan mengharuskan Anda untuk melaluinya dan memberi mereka setiap izin tunggal yang dimiliki oleh manajer SDM lainnya. Tidak hanya akan membosankan, tetapi juga rentan terhadap kesalahan jika dilakukan secara manual. Bandingkan ini dengan hanya menambahkan peran "manajer SDM" ke profil pengguna, yang akan memberi mereka akses yang sama seperti setiap pengguna lain dengan peran itu.
Anda dapat berargumen bahwa Anda dapat dengan mudah mengkloning pengguna yang ada (jika sistem Anda mendukung ini), tetapi sementara ini memang memberi pengguna izin yang benar untuk saat itu, mencoba untuk menambah atau menghapus izin untuk semua pengguna di masa depan mungkin sulit. Contoh skenario untuk ini adalah jika mungkin di masa lalu staf SDM juga bertanggung jawab atas penggajian, tetapi kemudian perusahaan menjadi cukup besar untuk mempekerjakan staf khusus untuk menangani penggajian. Ini berarti bahwa SDM tidak perlu lagi mengakses sistem penggajian, sehingga izin dapat dihapus. Jika Anda memiliki 10 anggota HR yang berbeda, Anda harus melalui secara manual dan memastikan Anda menghapus izin yang benar yang memperkenalkan kemungkinan kesalahan pengguna. Masalah lain dengan ini adalah bahwa itu tidak berskala; saat Anda mendapatkan lebih banyak dan lebih banyak pengguna dalam peran tertentu, itu membuat modifikasi peran jauh lebih sulit. Bandingkan ini dengan menggunakan peran, di mana Anda hanya perlu mengubah peran menyeluruh yang dimaksud untuk menghapus izin, yang akan tercermin oleh setiap pengguna yang memegang peran itu.