Как сделать сайт администратора Django доступным для некоммерческого пользователя? - PullRequest
6 голосов
/ 26 октября 2010

Я хотел бы реализовать второй сайт администратора, который предоставляет подмножество функций основного сайта администратора. Это возможно и описано в Django документах

Однако я бы хотел ограничить доступ к основному сайту администратора. Некоторые пользователи могут получить доступ ко второму сайту, но не к первичному сайту.

Чтобы реализовать эту функцию, я бы хотел, чтобы эти пользователи не были в штате (is_staff = False) и переписали AdminSite.has_permission

class SecondaryAdminSite(AdminSite):

    def has_permission(self, request):
        if request.user.is_anonymous:
            try:
                username = request.POST['username']
                password = request.POST['password']
            except KeyError:
                return False
            try:
                user = User.objects.get(username = username)
                if user.check_password(password):
                    return user.has_perm('app.change_onlythistable')
                else:
                    return False
            except User.DoesNotExist:
                return False
        else:
            return request.user.has_perm('app.change_onlythistable')

К сожалению, этот подход не работает. Пользователь может войти, но ничего не видит на дополнительном сайте администратора.

Что не так с этим подходом? Есть идеи, как реализовать эту функцию?

Заранее спасибо

Ответы [ 2 ]

2 голосов
/ 07 апреля 2011

Я думаю, что ваш подход теперь возможен: http://code.djangoproject.com/ticket/14434 (закрыто 5 недель назад)

Однако явная проверка «is_staff» по-прежнему выполняется в двух местах (кроме декоратора staff_member_required):

  • django.contrib.admin.forms.AdminAuthenticationForm.clean ()

    Вдобавок к has_permission () вам нужно предоставить не-штатному AdminSite «login_form», который не выполняет проверку is_staff, поэтому можно просто создать подкласс и настроить clean () соответственно.

  • шаблоны / админ / base.html

    должен быть слегка настроен. Div с идентификатором «user-tools» отображается только для активных сотрудников. Я предполагаю, что это сделано, потому что форма входа также использует этот шаблон, и кто-то может войти в систему в качестве активного внештатного сотрудника, но все равно не должен видеть эти ссылки.

0 голосов
/ 02 декабря 2010

Что не так с этим подходом?Любая идея, как реализовать эту функцию?

Что плохого в этом подходе, что разрешения и группы уже могут предоставить вам то, что вам нужно.Нет необходимости создавать подкласс AdminSite, если все, что вам нужно, это разделить пользователей.

Возможно, поэтому эта функция так плохо документирована, IMHO

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...