Wpis z mikrobloga

Dwa pytanka do ekspertów: czy zastosowanie pola ManyToManyField jako listy użytkowników mających mieć pozwolenie na dostęp do tego obiektu jakieś zasadnicze wady?

robię sobie wtedy permission:

[...]
def hasobjectpermission(self, request, view, obj):
....if view.action == ['retrieve', 'partial_update']:
........return request.user in obj.testers.all() or request.user == obj.owner
[...]

Czy z jakiegoś powodu potrzebuję django groups i od tej strony gryźć?

Drugie pytanie: Docelowo chcę wprowadzić rozwiązanie w którym tylko owner może w pełni modyfikować obiekt, natomiast "tester" może edytować tylko w jeden konkretny sposób. Konkretnie: chcę mieć klona funkcjonalności google docs: inline comments. "Tester" mógłby edytować tekst wyłącznie poprzez zaznaczanie fragmentów, do których byłyby podpinane komentarze (a więc mógłby jedynie wstawiać elementy z generowanym id komentarza). To wyłącznie frontend powinien się zajmować walidacją/ograniczaniem możliwości edycji, dobrze myślę?

Thanks from the mountain.

#drf #django #djangorestframework
  • 4
@IamHater:
Użyj wbudowanych grup i permissionów
W permissionach bedziesz mial canview, cancomment, can_edit itd itp
W grupach - tester/owner/viewer

M2M się nie sprawdzi, bedzie ciezsze w utrzymaniu, nie potrzebujesz calego modelu uzytkownika, a permissiony sa natywnie wspierane przez django wiec po co kombinujesz jak kon pod góre

I swoją drogą to jak bedziesz sprawdzał czy ktoś ma uprawnienia? if user in obj.testers.all() or user in obj.owners.all() or user in
To wyłącznie frontend powinien się zajmować walidacją/ograniczaniem możliwości edycji, dobrze myślę?

Nie


@Lunatik: Ok, a rzucisz jakieś hasła żebym mógł się doedukować? : (
wiec po co kombinujesz jak kon pod góre


@Lunatik: Jakbym wiedział że to tak wygląda to bym w kunia się nie bawił ( ͡° ͜ʖ ͡°) Po prostu wyszedłem od custom permissions wykonywanych przez viewsety. Jeżeli DjangoModelPermissions będzie lepsze to się przyjrzę.

if user in obj.testers.all() or user in obj.owners.all() or user in obj.admins.all() ? bez sensu


Hm, nie no, jest tylko jeden owner i grupa testerów.