Разрешения, специфичные для Django, для пользователей

#python #django

#python #django

Вопрос:

например, у меня есть модель с booleanfield

 class Item(BaseModel):
    name = models.CharField(max_length=255)
    pending = models.BooleanField(default=False)
  

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

Комментарии:

1. пожалуйста, исправьте отступ

Ответ №1:

Существует несколько способов реализовать это, в зависимости от того, как вы в конечном итоге собираетесь его использовать. Самый простой — добавить пользователю foreignkey в свой элемент (при условии, что вы используете django auth).

 from django.contrib.auth.models import User
class Item(BaseModels):
    created_by = models.ForeignKey(User)
    name = models.CharField(max_length=255)
    pending = models.BooleanField(default=False)
  

предполагая, что это доступно только через представления, тогда вы можете просто сделать:

 def some_view(request):
    if item_being_edited.created_by = request.user and not item_being_edited.pending:
         #rejection goes here
    #do stuff
  

в качестве примечания измените ожидающее поле. Либо ожидание = True означает, что элемент находится на рассмотрении, либо он должен быть одобрен = False. Позже будет проще, если имеет смысл прочитать это в вашей голове без гимнастики.

Комментарии:

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

2. Не то, о чем я знаю. Если вам нужна защита от пользователей-администраторов, вам, вероятно, понадобится новая модель авторизации

3. я не думаю, что есть необходимость в новой модели авторизации. мне нужно, чтобы это одно поле в панели администратора это логическое поле (ожидающее) должно быть изменяемым для других пользователей не по запросу.пользователь, создавший этот объект

4. @I.Jokhadze функциональность django.contrib.auth не поддерживает этот уровень управления разрешениями на уровне строк. Плагин django-authority.readthedocs.io/en/latest утверждает, что делает это, но я не рассматривал его в деталях.

5. Прошу помощи. Я попробую это