Rumah > Artikel > pembangunan bahagian belakang > Teknik kawalan kebenaran dalam rangka kerja Django (Bahagian 2)
Kemahiran kawalan kebenaran dalam rangka kerja Django (Bahagian 2)
Dalam rangka kerja Django, kawalan kebenaran adalah bahagian yang sangat penting. Dalam artikel sebelumnya, kami telah memperkenalkan beberapa teknik kawalan kebenaran asas dalam rangka kerja Django, termasuk menggunakan sistem pengesahan kebenaran terbina dalam dan kawalan kebenaran berasaskan penghias. Artikel ini akan terus meneroka teknik kawalan kebenaran lain dalam rangka kerja Django.
Dalam rangka kerja Django, kami boleh menggunakan hujung belakang pengesahan tersuai untuk melaksanakan logik pengesahan tersuai. Dengan mewarisi kelas belakang pengesahan Django dan melaksanakan kaedah pengesahannya, kami boleh menentukan logik pengesahan kami sendiri. Sebagai contoh, kita boleh menggunakan bahagian belakang pengesahan tersuai untuk melaksanakan pengesahan berasaskan LDAP atau OAuth.
Berikut ialah contoh menggunakan bahagian belakang pengesahan tersuai untuk melaksanakan pengesahan berasaskan LDAP:
from django.contrib.auth.backends import BaseBackend import ldap class LDAPBackend(BaseBackend): def authenticate(self, request, username=None, password=None, **kwargs): ldap_server = "ldap://example.com" ldap_base_dn = "ou=people,dc=example,dc=com" conn = ldap.initialize(ldap_server) try: conn.simple_bind_s("uid=%s,%s" % (username, ldap_base_dn), password) return User.objects.get(username=username) except ldap.INVALID_CREDENTIALS: return None
Dalam contoh di atas, kami mewarisi kelas BaseBackend Django dan melaksanakan kaedah pengesahan di dalamnya untuk menentukan logik pengesahan anda sendiri. Dalam kaedah ini, kami menggunakan modul ldap Python untuk menyambung ke pelayan LDAP dan mengesahkan bahawa nama pengguna dan kata laluan adalah betul melalui kaedah simple_bind_s. Jika pengesahan berjaya, objek Pengguna dikembalikan.
Selepas kami selesai menulis bahagian belakang pengesahan tersuai, kami perlu menentukan kelas bahagian belakang pengesahan dalam fail tetapan Django:
AUTHENTICATION_BACKENDS = ['path.to.LDAPBackend']
django-guardian ialah aplikasi pihak ketiga yang sangat berkuasa dalam rangka kerja Django, yang menyediakan fungsi kawalan kebenaran yang terperinci. Berbanding dengan sistem pengesahan kebenaran terbina dalam Django, penjaga django menyediakan kaedah kawalan kebenaran yang lebih fleksibel dan disesuaikan.
Menggunakan django-guardian adalah sangat mudah Anda hanya perlu memasang dan menentukan AUTHENTICATION_BACKENDS dan AUTHORIZATION_BACKENDS dalam fail tetapan Django. Contohnya:
# settings.py AUTHENTICATION_BACKENDS = ('django.contrib.auth.backends.ModelBackend',) INSTALLED_APPS = ( # ... 'guardian', ) MIDDLEWARE_CLASSES = ( # ... 'guardian.middleware.PermissionDeniedMiddleware', ) AUTHORIZATION_BACKENDS = ( 'guardian.backends.ObjectPermissionBackend', )
django-guardian menyediakan beberapa penghias yang boleh digunakan untuk mengawal akses kepada objek tertentu dalam model. Contohnya:
from django.views.generic import DetailView from guardian.decorators import permission_required from myapp.models import MyModel @permission_required('myapp.view_mymodel', (MyModel, 'pk', 'pk')) class MyModelDetailView(DetailView): model = MyModel
Dalam contoh di atas, kami menggunakan permission_required decorator untuk mengawal kebenaran akses MyModel. Penghias perlu menentukan kebenaran dan maklumat objek untuk disahkan. Jika pengesahan kebenaran gagal, pengecualian PermissionDenied akan dilemparkan secara automatik.
django-rules ialah satu lagi aplikasi pihak ketiga yang sangat praktikal yang menyediakan fungsi kawalan kebenaran berasaskan peraturan . Berbanding dengan django-guardian, django-rules adalah lebih mudah dan ringan.
Penggunaan django-rules adalah serupa dengan penggunaan django-guardian Anda hanya perlu memasang dan menentukan AUTHENTICATION_BACKENDS dan AUTHORIZATION_BACKENDS dalam fail tetapan Django. Contohnya:
# settings.py INSTALLED_APPS = ( # ... 'rules', ) AUTHENTICATION_BACKENDS = ('django.contrib.auth.backends.ModelBackend',) AUTHORIZATION_BACKENDS = ('rules.permissions.ObjectPermissionBackend',)
Menggunakan django-rules untuk kawalan kebenaran memerlukan penentuan set peraturan, setiap satunya mengandungi syarat dan hasil. Jika syarat dipenuhi, operasi dalam hasilnya akan dilakukan, jika tidak, ia tidak akan dilakukan. Contohnya:
from rules import rule from myapp.models import MyModel @rule('view', 'myapp.view_mymodel') def can_view_mymodel(user, mymodel): return True @rule('change', 'myapp.change_mymodel') def can_change_mymodel(user, mymodel): return user.is_superuser or user == mymodel.user
Dalam contoh di atas, kami menentukan dua peraturan untuk mengawal kebenaran untuk melihat dan mengubah suai objek MyModel. Dalam setiap peraturan, kami menggunakan penghias peraturan untuk menentukan syarat dan keputusan. Dua parameter, pengguna dan model saya, perlu diluluskan dalam syarat untuk penghakiman kebenaran. Jika kebenaran diluluskan, anda boleh terus melakukan operasi seterusnya.
Selepas menulis peraturan, kita perlu menambah peraturan pada Django:
# settings.py RULES_MODULE = 'myapp.rules'
Dalam contoh di atas, kami menggunakan RULES_MODULE untuk menentukan modul Python di mana peraturan itu berada. Dengan cara ini, Django boleh memuatkan peraturan secara automatik apabila ia bermula.
Ringkasan
Dalam rangka kerja Django, kawalan kebenaran ialah fungsi yang sangat penting dan penting. Melalui beberapa teknik yang diperkenalkan di atas, kita boleh melaksanakan fungsi kawalan kebenaran asas atau kompleks dengan mudah. Sama ada menggunakan sistem pengesahan terbina dalam, kawalan kebenaran berasaskan penghias, hujung belakang pengesahan tersuai, django-guardian atau django-rules, kita boleh memilih kaedah kawalan kebenaran yang paling sesuai berdasarkan keperluan perniagaan tertentu.
Atas ialah kandungan terperinci Teknik kawalan kebenaran dalam rangka kerja Django (Bahagian 2). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!