Pertanyaan django-object-permissions Vs django-wali Vs django-otoritas


Saya telah menemukan 3 solusi izin tingkat baris untuk Django 1.2+

Bisakah seseorang mengatakan jika ada yang direkomendasikan lebih dari yang lain, apa perbedaan utama mereka, dll?


32
2018-06-18 12:10


asal


Jawaban:


Saya akan memulainya dengan mengatakan kami tidak menggunakan ini untuk izin tingkat objek - kami menggunakan metode kustom kami sendiri dan saya benar-benar berharap kami tidak melakukannya. Jika Anda dapat menghindari izin tingkat objek sama sekali, lakukan, mereka merasa sakit untuk mengatur.

Ini adalah cara saya mengevaluasi 3 aplikasi yang telah Anda sebutkan.

Pengembangan Aktif:

  1. django-guardian (1 minggu yang lalu)
  2. django-object-permissions (1 tahun yang lalu)
  3. django-authority (hampir 2 tahun yang lalu)

API

  1. django-guardian (simpan instance dari model yang ditentukan)
  2. django-object-permissions (daftar izin)
  3. django-authority (menentukan kelas)

Hal-hal di atas sesuai dengan cara.

Saya akan merekomendasikan wali murni pada API saja, tetapi fakta bahwa itu masih sedang dikembangkan di mana yang lain biasanya tidak berarti menang besar.


24
2018-06-18 12:28



Adapun Agustus '13, Django-object-permissions telah digantikan oleh Django-izin. 3 proyek sedang dalam pengembangan aktif.

Secara pribadi, saya lebih suka otoritas atau izin, yang menggunakan metode untuk memeriksa perizinan (runtime), daripada django-guardian yang menggunakan database untuk menjaga izin (terlampir pada pembuatan objek, f.e.).

- EDIT -

Contoh dari dokumen.

Django-wali

joe = User.objects.create(username='joe')
task = Task.objects.create(summary='Some job', content='', reported_by=boss)
joe.has_perm('view_task', task)
>> False
assign_perm('view_task', joe, task)
joe.has_perm('view_task', task)
>> True

Anda memberikan izin dan menyimpannya dalam basis data.

otoritas Django

Pernyataan:

class FlatpagePermission(permissions.BasePermission):
    label = 'flatpage_permission'
    checks = ('morning_flatpage_check',)

    def morning_flatpage_check(self, flatpage):
        hour = int(datetime.datetime.now().strftime("%H"))
        if hour >= 8 and hour <= 12 and flatpage.url == '/about/':
            return True
        return False

authority.register(Flatpage, FlatpagePermission)

Pemakaian:

def my_view(request):
    check = FlatPagePermission(request.user)
    flatpage_object = Flatpage.objects.get(url='/homepage/')
    if check.morning_flatpage_check(flatpage=flatpage_object):
        print "Yay, you can change *this* flatpage!"

Ini juga membungkus izin Django standar, tetapi Anda dapat melihat fleksibilitas dalam izin khusus di atas yang -AFAIK- Anda tidak dapat melakukannya di wali.

Usecase Umum

Siswa dapat menjadi milik Kelas (s).

wali:

  1. Saat Siswa ditugaskan ke Kelas baru, lampirkan izin 'attend_classroom' ke Siswa di atas objek Kelas.
  2. Saat Siswa dihapus dari Kelas, hapus 'attend_classroom' izin untuk Siswa atas objek Kelas.
  3. Saat mengakses Kelas, periksa 'attend_classroom' izin.

wewenang:

  1. Tentukan izin khusus ClassroomPermission.can_attend_classroom(), yang akan menanyakan apakah Siswa termasuk Kelas.
  2. Saat mengakses Kelas, periksa ClassroomPermission.can_attend_classroom()

Otoritas menyimpan logika pengecekan dalam file terpisah. Guardian perlu melampirkan / menghapus izin meskipun sisa kode.


17
2017-08-19 05:18