Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Django
  • » Помогите разобратся с правами пользователей Django [RSS Feed]

#1 Март 13, 2008 09:21:26

pochechyev
От:
Зарегистрирован: 2008-02-29
Сообщения: 199
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите разобратся с правами пользователей Django

Добрый день!
Товарищи, читал доку, смотрел, все равно не могу понять как пользователя добавлять права.
Дайте пожалуйста пример.
Пытался делать так:

request.user.user_permissions.add("can_write")
нифига не работает.
помогите пжл.



Офлайн

#2 Март 13, 2008 12:32:23

playpauseandstop
От:
Зарегистрирован: 2007-10-31
Сообщения: 77
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите разобратся с правами пользователей Django

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/



Офлайн

#3 Март 13, 2008 12:39:44

pochechyev
От:
Зарегистрирован: 2008-02-29
Сообщения: 199
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите разобратся с правами пользователей Django

Спасибо.



Офлайн

#4 Март 18, 2008 12:19:33

pochechyev
От:
Зарегистрирован: 2008-02-29
Сообщения: 199
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите разобратся с правами пользователей Django

Блин, я все понял.
Только один вопрос.
Из этой строки

p = Permission.objects.get(content_type__app=package, codename=codename)
этот кусок:
content_type__app=package
обьясните пожалуйста что мы присваиваем content_type. насколько я понял код то content_type это ForeignKey field. а в примере написано что мы присваиваем ему нечто вроде “auth”.

что же мы все таки присваиваем этому полю?



Отредактировано (Март 18, 2008 12:24:12)

Офлайн

#5 Март 18, 2008 14:07:18

slivlen
От:
Зарегистрирован: 2006-07-06
Сообщения: 764
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите разобратся с правами пользователей Django

Офлайн

#6 Март 18, 2008 14:08:17

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

Помогите разобратся с правами пользователей Django

Давайте вместе разбираться.
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.

Про `__` почитайте повнимательней.



Отредактировано (Март 18, 2008 14:08:59)

Офлайн

#7 Март 18, 2008 15:53:09

pochechyev
От:
Зарегистрирован: 2008-02-29
Сообщения: 199
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите разобратся с правами пользователей Django

спасибо понял.
опять появились вопросы.
1.content_type__book говорит что неправильно(TypeError at /usertest/ Cannot resolve keyword ‘book’ into field), почему такое может быть ?
2. как же все таки добавить пользователю прав?(НЕ через админку)



Отредактировано (Март 18, 2008 15:57:21)

Офлайн

  • Начало
  • » Django
  • » Помогите разобратся с правами пользователей Django[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version