Django menyediakan fitur permission bawaan seperti add, change, dan delete. Namun, terkadang kita memerlukan permission yang tidak termasuk dalam permission bawaan tersebut. Untuk itu, Django memungkinkan kita untuk membuat custom permission sendiri. Berikut adalah langkah-langkah untuk membuat custom permission pada Django.
django.contrib.auth.models.Permission
:
from django.contrib.auth.models import Permission
class CustomPermission(Permission):
# fields dan methods untuk custom permission
django.contrib.auth.management.create_permissions
dalam method ready()
di dalam file apps.py
pada aplikasi kita:
from django.apps import AppConfig
from django.contrib.auth.management import create_permissions
class MyAppConfig(AppConfig):
name = 'my_app'
def ready(self):
create_permissions(self.models_module)
permissions
pada Meta
class:
from django.db import models
from my_app.permissions import CustomPermission
class MyModel(models.Model):
# fields dan methods model
class Meta:
permissions = [
("can_do_something", "Can do something with MyModel"),
("can_do_another_thing", "Can do another thing with MyModel",),
(CustomPermission, "Custom permission for MyModel")
]
Dalam contoh di atas, kita menambahkan dua permission bawaan Django ("can_do_something" dan "can_do_another_thing") dan satu custom permission yang sudah kita buat sebelumnya (CustomPermission).
@permission_required
:
from django.contrib.auth.decorators import permission_required
@permission_required('my_app.can_do_something')
def my_view(request):
# logic view
Atau, kita dapat memeriksa permission di dalam view dengan menggunakan method has_perm()
pada user object:
def my_view(request):
if request.user.has_perm('my_app.can_do_something'):
# logic view
Demikianlah cara membuat custom permission pada Django. Dengan custom permission, kita dapat mengontrol akses ke fitur-fitur tertentu dalam aplikasi kita secara lebih fleksibel.
Ada tutorial di atas, kita menggunakan python decorator untuk "melindungi" views yang membutuhkan permission.
function @permission_required
untuk memastikan bahwa hanya pengguna yang memiliki permission tertentu yang dapat mengakses view tersebut. Decorator ini secara otomatis akan melakukan pengecekan permission dan akan memindahkan pengguna ke halaman login jika mereka tidak memiliki permission yang diperlukan.
Namun, kita juga dapat menggunakan metode lain untuk memeriksa permission di dalam view tanpa menggunakan decorator, seperti menggunakan method has_perm()
pada user object, seperti yang ditunjukkan dalam contoh di langkah kelima di atas.
Baca juga: