Найти - Пользователи
Полная версия: Помогите разобратся с правами пользователей Django
Начало » Django » Помогите разобратся с правами пользователей Django
1
pochechyev
Добрый день!
Товарищи, читал доку, смотрел, все равно не могу понять как пользователя добавлять права.
Дайте пожалуйста пример.
Пытался делать так:
request.user.user_permissions.add("can_write")
нифига не работает.
помогите пжл.
playpauseandstop
pochechyev
Пытался делать так:
request.user.user_permissions.add("can_write")
а так нечего и не будет… ибо вы пытаетесь добавить в М2М не объект модели а объект текста…

надо бы как-то так:
from django.contrib.auth.decorators import login_required
from django.contrib.auth.models import Permission
from django.http import Http404, HttpResponseRedirect
@login_required
def add_permission(request, permission):
    redirect_to = request.GET.get('next', request.META.get('HTTP_REFERER', '/'))
    if request.user.has_perm(permission):
        return HttpResponseRedirect(redirect_to)
    try:
        package, codename = permission.split('.')
        p = Permission.objects.get(content_type__app=package, codename=codename)
    except Permission.DoesNotExist:
        raise Http404
    request.user.user_permissions.add(p)
    request.user.save()
    return HttpResponseRedirect(redirect_to)
в urls.py:
urlpatterns += ('yourapp.views',
    url(r'^permissions/add/(?P<permission>.*)/', 'add_permission', name='add_permission'),
)
для тестов:
http://path/to/yourapp/permissions/add/auth.add_user/
http://path/to/yourapp/permissions/add/auth.change_user/
http://path/to/yourapp/permissions/add/auth.delete_user/
pochechyev
Спасибо.
pochechyev
Блин, я все понял.
Только один вопрос.
Из этой строки
p = Permission.objects.get(content_type__app=package, codename=codename)
этот кусок:
content_type__app=package
обьясните пожалуйста что мы присваиваем content_type. насколько я понял код то content_type это ForeignKey field. а в примере написано что мы присваиваем ему нечто вроде “auth”.

что же мы все таки присваиваем этому полю?
Александр Кошелев
Давайте вместе разбираться.
1. Во view как часть url попадает имя права- permission. Оно состоит из двух частей разделенных точкой. Первая часть - название приложения; вторая - название конкретного права (точнее его код)
2. Далее в строке:
package, codename = permission.split('.')
происходит как раз разбор названия на 2 части
3. Потом в:
p = Permission.objects.get(content_type__app=package, codename=codename)
происходит поиск данного права в базе. Поиск осуществляется как раз по тем двум частям названия: имени приложения и кода.
`content_type` - да это ForeignKey, но `content_type__app` - это поле названия приложения в базе ContentType.

Про `__` почитайте повнимательней.
pochechyev
спасибо понял.
опять появились вопросы.
1.content_type__book говорит что неправильно(TypeError at /usertest/ Cannot resolve keyword ‘book’ into field), почему такое может быть ?
2. как же все таки добавить пользователю прав?(НЕ через админку)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB