Działa to dla mnie na moim „przedsięwzięcie” tabela/model:
@permission_required('myApp.add_project')
def create(request):
# python code etc...
Oczywiście zmień parametr add_project na add_ [bez względu na model/tabelę]. Aby dokonać edycji, należy:
@permission_required ('myApp.edit_project ')
i usunąć:
@permission_required (' myApp.delete_project ')
Ale okazało się, że kluczową sprawą jest, aby upewnić się, że tabele auth są ustawione prawidłowo. To właśnie spowodowało mi problemy. Oto zapytanie SQL MySQL, które napisałem, aby sprawdzić uprawnienia, jeśli korzystasz z grup. To powinno działać w większości dB:
select usr.id as 'user id',usr.username,grp.id as 'group id',grp.name as 'group name',grpu.id as 'auth_user_groups',grpp.id as 'auth_group_permissions',perm.name,perm.codename
from auth_user usr
left join auth_user_groups grpu on usr.id = grpu.user_id
left join auth_group grp on grpu.group_id = grp.id
left join auth_group_permissions grpp on grp.id = grpp.group_id
left join auth_permission perm on grpp.permission_id = perm.id
order by usr.id;
odkryłem, że moje uprawnienia nie zostały ustawione poprawnie, a także uważaj na stole django_content_type który musi mieć wierszy dla każdej aplikacji i stołem dla każdego dodawać, edytować, usuwać . Więc jeśli masz tabelę projekt powinien to zobaczyć w django_content_type:
id [generated by dB]
app_label myApp
model project
Jeśli masz problemy z kolejnym dobrym pomysłem jest, aby włączyć i korzystać z aplikacji Django administratora. Dzięki temu dowiesz się, gdzie znajdują się twoje problemy, a konfigurując niektóre uprawnienia testowe, użytkownicy i grupy, możesz przeanalizować tabele omówione powyżej, aby zobaczyć, co jest wstawiane gdzie. To da ci pojęcie, jak działają uprawnienia auth.
Piszę to, aby uratować kogoś przed spędzeniem kilku godzin, zastanawiając się, co zrobiłem!
Dzięki. To działa. Czy masz przykład jak używać permission_required? Z dokumentacji http://docs.djangoproject.com/en/1.0/topics/auth/#the-permission-required-decorator i http://www.djangobook.com/en/2.0/chapter14/ Myślałem, co ja powinien zadziałać. – Mitch
Ah. Widzę. Dzięki za wytrwałość. – Mitch
Czy możesz wyjaśnić, co się dzieje z ** "polls.can_vote" ** parametrem na końcu? Jaki jest jego cel i gdzie się on odnosi? Czy to może nazwa grupy, której musi być członkiem? –