각 레스토랑에는 여러 명의 관리자가있을 수 있습니다.Django "규칙"을 CBV와 함께 사용하면 작동하지 않는 것 같습니다.
class Restaurant(models.Model):
...
managers = models.ManyToManyField(User, related_name='restaurants_which_they_manage')
식당 관리자 만 식당 목록을 변경할 수 있습니다. 이걸 적용하기 위해 django-rules을 사용하고 있습니다.
@rules.predicate
def is_restaurant_manager(user, restaurant):
return user in restaurant.managers.all()
그리고 여기 권한입니다 : 나는 좋은 자세한 "is_restaurant_manager"참조를 생성하는 조건이있어
class RestaurantChange(PermissionRequiredMixin, UpdateView):
model = Restaurant
permission_required = 'restaurants.change_restaurant'
fields = ['name', 'description', ]
: 마지막으로
rules.add_perm('restaurants.change_restaurant', is_restaurant_manager)
을, 여기에 내 생각이다 두 가지 검사가있어.
테스트 A는 권한이 제대로 작동하는지 확인 :
self.assertEqual(rules.has_perm('restaurants.change_restaurant', self.user, self.restaurant), True)
이 첫 번째 테스트를 성공적으로 통과한다.
시험 B는 유효한 사용자와 URL을 액세스를 시도 :
url = reverse('restaurants__restaurant_change', kwargs={'pk': self.restaurant.key,})
response = self.client.get(url)
self.assertEqual(response.status_code, 200)
시험 B가 실패, 나는 재를 얻을 수있다. 이것은 브라우저를 통해 URL에 액세스하려고 시도 할 때도 발생합니다. 리디렉션은 사용자가보기에 액세스 할 수있는 권한이없는 것처럼 로그인 프로세스로 이동합니다.
내 코드에 어떤 문제가 있습니까?
사용자를 설정하고 테스트에 사용 권한을 할당하려면 어떻게합니까? – Alasdair
안녕 Alasdair, 나는'User.objects.create_user' 다음에'Restaurant.objects.create'와'restaurant.managers.add (user)'를 사용합니다. 브라우저에서 재생성 할 수 있으므로 문제가 테스트에서 비롯된 것이라고 생각하지 않습니다. – Brachamul
테스트에 사용자를 어떻게 로그인 하시겠습니까? – Alasdair