Dalam project dunia nyata, tentu tidak jarang kita akan menemukan project-project berkebutuhan khusus yang membutuhkan extra skill untuk menyelesaikannya.
Pada artikel kali ini, kita akan coba membahas sedikit tentang bagaimana cara membuat multiple user permission pada django menggunakan fungsi bawaan dari django, fungsi tersebut tentunya akan kita custom sesuai dengan kebutuhan agar lebih flexible dengan kebutuhan project yang sedang kita kerjakan.
Django menyediakan fitur yang memungkinkan pengguna memiliki hak akses yang berbeda pada aplikasi web yang dibangun dengan Django.
Berikut adalah langkah-langkah untuk membuat multiple user permission pada Django:
Buatlah sebuah aplikasi Django baru atau buka aplikasi yang sudah ada.
Buat model user baru yang akan digunakan sebagai parent model dari model user dengan hak akses yang berbeda. Model ini akan menyimpan informasi umum yang berlaku untuk semua pengguna.
from django.contrib.auth.models import AbstractUser
class CustomUser(AbstractUser):
pass
class RegularUser(models.Model):
user = models.OneToOneField(CustomUser, on_delete=models.CASCADE, primary_key=True)
class AdminUser(models.Model):
user = models.OneToOneField(CustomUser, on_delete=models.CASCADE, primary_key=True)
class SuperUser(models.Model):
user = models.OneToOneField(CustomUser, on_delete=models.CASCADE, primary_key=True)
user_type
pada model CustomUser
untuk menandai tipe pengguna. Kemudian, atur nilai defaultnya menjadi REGULAR
(untuk pengguna reguler).
class CustomUser(AbstractUser):
USER_TYPE_CHOICES = (
('REGULAR', 'Regular'),
('ADMIN', 'Admin'),
('SUPER', 'Super'),
)
user_type = models.CharField(choices=USER_TYPE_CHOICES, max_length=10, default='REGULAR')
middleware.py
dan tambahkan kode berikut:
from django.http import HttpResponseForbidden
class UserAccessMiddleware:
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
if request.user.is_authenticated:
if request.user.user_type == 'ADMIN':
if not request.path.startswith('/admin/'):
return HttpResponseForbidden()
elif request.user.user_type == 'REGULAR':
if request.path.startswith('/admin/'):
return HttpResponseForbidden()
response = self.get_response(request)
return response
MIDDLEWARE
pada settings.py
.
MIDDLEWARE = [
# ...
'path.to.middleware.UserAccessMiddleware',
]
@user_passes_test
decorator pada view function untuk menentukan akses pengguna pada tiap view.
from django.contrib.auth.decorators import user_passes_test
@user_passes_test(lambda u: u.user_type == 'ADMIN')
def admin_only_view(request):
# ...
Dengan melakukan langkah-langkah di atas, kita sudah berhasil membuat multiple user permission pada Django. Dalam contoh ini, hanya ada tiga jenis pengguna yang dibuat (REGULAR, ADMIN, dan SUPER), tetapi kita bisa menambahkan lebih banyak tipe pengguna sesuai dengan kebutuhan aplikasi kita.