Иногда необходимо сделать так, чтобы доступ к редактированию записи имел только пользователь создавший ее. В этой заметке я расскажу о простом пути создания доступов в Django при представлении построенном на django.views.generic.UpdateView

 

Допустим у вас есть класс модели, назовем его Post, оно имеет ForeignKey связь с моделью User. В общем значения не имеет ваша это модель или стандартная django.

Также мы создали форму из модели Post, она называется FormPost

Теперь нам необходимо создать сам view для редактирования наших постов, в первоначальном варианте она будет выглядеть примерно так:

class PostUpdateView(UpdateView):
    form_class = FormPost
    model = UserShop
    template_name = 'post.html'

Этого будет достаточно, чтобы редактировать наши записи, но остается одна проблема, любой другой пользователь с равными правами может сделать тоже самое, и теперь давайте исправим это. В класс PostUpdateView добавим следующие строки

    def get(self, request, *args, **kwargs):
        self.object = self.get_object()
        self.check_permission(self.request.user, self.object)
        return super(PostUpdateView, self).get(request, *args, **kwargs)

    def post(self, request, *args, **kwargs):
        self.object = self.get_object()
        self.check_permission(self.request.user, self.object)
        return super(PostUpdateView, self).post(request, *args, **kwargs)

    def check_permission(self, user, object):
        if object.user != user:
            raise exceptions.PermissionDenied()

Что же делает данный код? Здесь все просто, мы проверяем соответствует ли пользователь сделавший запрос, пользователю создавшему запись и если это не так то мы сообщаем что доступа нет.


22 апреля 2013 г. 12:34:08    Alex Vakhitov Django 0

Комментарии (0)

    Вам нужно авторизироваться, чтобы оставить свой комментарий

    /*Вход*/

    Login with github
    /*Twitter*/
    /*Реклама*/