ФорумПрограммированиеPythonDjango → Как добавить Permission на смену пароля в админке?

Как добавить Permission на смену пароля в админке?

  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 28 июня 2012 г. 9:29

    Вообщем суть задачи: некоторые пользователи не в праве менять себе пароль в админке, вообщем это некотоые "контенты".

    Я пока сделал так, потомучто не нашел в исходниках как это более корректно поправить. Либо манкипатчить, либо ещё чего - все хуже чем текущее решение:

    common/admin.py:
    # coding: utf-8
    from django.contrib.auth.models import User, Permission
    from django.contrib.contenttypes.models import ContentType
    from django.db import IntegrityError



    try:
       content_type = ContentType.objects.get(app_label=User._meta.app_label, model=User._meta.module_name)
       Permission.objects.create(
           name="Can change your password",
           content_type=content_type,
           codename="can_change_your_password")
    except IntegrityError:
       pass


    common/middleware.py:
    from django.core.exceptions import PermissionDenied

    class AdminPasswordChangeOverrider(object):
       def process_view(self, request, view_func, view_args, view_kwargs):
           if (view_func.__module__, view_func.func_name) == ('django.contrib.admin.sites', 'password_change'):
               if not request.user.has_perm('auth.can_change_your_password'):
                   raise PermissionDenied

    adw/0
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 28 июня 2012 г. 9:47, спустя 17 минут 30 секунд

    1) Можно конечно часть из common/admin.py засунуть в фикстуру, но не суть.
    2) Вариант с Meta.permissions правильный, но придётся подменять родного User, не cool (monkeypatching, django-primate)
    Спустя 106 сек.
    3) Можно конечно создать модельку типа UserProfile, которая будет OneToOne для auth.User, ей задать permissions, а в middleware проверять её permissions. Но только из-за permissions не хочется создавать отдельную сущность, хотя безспорно достойный вариант
    adw/0
  • kostyl

    Сообщения: 5203 Репутация: N Группа: Джедаи

    Spritz 28 июня 2012 г. 9:47, спустя 52 секунды

    а нельзя изначально разрешить менять только тем, кому не надо запретить?
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 28 июня 2012 г. 9:53, спустя 5 минут 41 секунду


    а нельзя изначально разрешить менять только тем, кому не надо запретить?
    у меня взорвался мозг от твоего предложения)
    по дефолту так и будет, менять могут все пока им не запретишь
    Спустя 39 сек.
    потомучто этот пермишен есть в группе, а пользователи состоят либо в группе, либо они superuser, а последнему все можно
    adw/0
  • kostyl

    Сообщения: 5203 Репутация: N Группа: Джедаи

    Spritz 28 июня 2012 г. 14:24, спустя 4 часа 31 минуту 14 секунд

    потомучто этот пермишен есть в группе, а пользователи состоят либо в группе, либо они superuser, а последнему все можно

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

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 28 июня 2012 г. 15:11, спустя 46 минут 25 секунд

    я понял твою идею, просто клиенту надо чтобы все кроме тех кому он разрешил был закрыт доступ на изменение пароля
    adw/0

Пожалуйста, авторизуйтесь, чтобы написать комментарий!