Django Python: добавление пользовательских разрешений для определенных пользователей

Models.py

class Meta:
    permissions = (
        ("can_add_data","can add a new data"),
        )

Это пользовательское разрешение, которое я создал в Models.py, и я также создал этих пользователей.

https://i.stack.imgur.com/e1aRz.png

Как дать разрешение определенным пользователям, чтобы я мог использовать @permission_required('myapp.can_add_data') в views.py, а также где я могу написать фрагмент? (в каком файле)

Я новичок в этом, так что если есть какие-то ошибки, пожалуйста, сообщите мне.


person Vinay Guda    schedule 27.02.2018    source источник


Ответы (1)


Вы можете назначить разрешение пользователю через Django Admin или Django shell
через django-shell
откройте оболочку django с помощью python manage.py shell и выполните следующие инструкции

In [1] from django.contrib.auth.models import Permission,User
In [2] permission = Permission.objects.get(name='can add a new data')
In [3] user = User.objects.get(id=user_id)
In [4] user.user_permissions.add(permission)


через django-admin
откройте страницу django-admin, перейдите в раздел Users и выберите нужный раздел user.
Там вы увидите раздел User permissions, как показано на изображении ниже,
< br> user permission image

Затем найдите нужное разрешение (ref-1) (в вашем случае app_name|model_name|can add a new data) и нажмите (ref- 2 и ref-3), затем сохраните

ПРИМЕЧАНИЕ. обновляйте его каждый раз, если вам не нужно изменять/переназначать разрешения.

Как использовать это разрешение в API
в вас views.py определите такое представление,< бр>

from django.contrib.auth.decorators import permission_required


@permission_required('app_name.can_add_data')
def my_view(request):
    # do something
    return HttpResponse("response")


person JPG    schedule 27.02.2018
comment
Вы мигрировали после добавления permissions в класс Meta модели? - person JPG; 27.02.2018
comment
Если вы сделали это правильно, должно быть в Permission. Его можно получить/увидеть с помощью ORM или django-admin - person JPG; 27.02.2018
comment
Большое спасибо за ответ, но я сейчас пуст. так что не могли бы вы сказать мне, что именно делать? Я узнал, что мы можем выполнить в оболочке только сейчас. поэтому я надеюсь, что вы понимаете мою ситуацию. - person Vinay Guda; 27.02.2018
comment
Я думаю, что вы не мигрировали должным образом. Так что беги, python manage.py makemigrations app_name, а потом беги python manage.py migrate app_name - person JPG; 27.02.2018
comment
Я сделал, и проблема все еще сохраняется. это мои модели.py prntscr.com/ikbvez - person Vinay Guda; 27.02.2018
comment
Это проект стажировки, поэтому, боюсь, я не могу. но я думаю, что могу показать вам в TeamViewer или любом программном обеспечении - person Vinay Guda; 27.02.2018
comment
Привет!! Я запустил это python manage.py migrate app_name zero, а затем перенес приложение, после чего оно заработало. большое спасибо!! - person Vinay Guda; 27.02.2018
comment
Рад это слышать :) - person JPG; 27.02.2018