2016-09-26 3 views
0

Как бы проверить, является ли пользователь частью группы внутри декоратора permission_required?Проверка членства в пользовательской группе в разрешении_обновлено

Это то, что я в настоящее время, но это не похоже, чтобы проверить его ..

@permission_required(['user.is_super_user', "'NormalUser' in user.groups.all"], raise_exception=True) 

Это должно проверить, является ли пользователь супер пользователь или пользователь является частью группы NormalUser но когда я пытаюсь получить доступ к сайту, он просто дает мне ошибку 403, когда пользователь входит в группу .

Есть ли способ, которым я могу это сделать? Я хочу использовать только декоратор permission_required, ничего другого: S

+1

«Я хочу использовать только разрешительный декор, ничего другого: S» почему? – e4c5

+0

Как следует из названия, 'permission_required' проверяет, имеет ли текущий пользователь заданный _permission_ (https://docs.djangoproject.com/en/1.10/topics/auth/default/#permissions-and-authorization). –

ответ

1

Для этого вы должны использовать user_passes_test. Декоратор permission_required проверяет разрешения. Здесь нет смысла использовать его здесь.

Во-первых, вам необходимо определить функцию тестирования, которая возвращает истину, если пользователь является суперпользователем или находится в NormalUser группе:

def superuser_or_normaluser(user): 
    return user.is_superuser or user.groups.filter(name='NormalUser').exists() 

Затем вы можете использовать эту тестовую функцию с user_passes_test декоратора.

@user_passes_test(superuser_or_normaluser, raise_exception=True) 
1

Я не верю, что вы можете пройти проверку завивки, как последний в списке, который по существу пытается выполнить некоторые питона код, который не будет работать.

Было бы удобно понять, что ваш вариант использования на самом деле есть, но если вы строго хотите использовать декоратор decor_required (вместо простого создания собственного декоратора, который делает именно то, что вы хотите, или используя «user_passes_test», декоратор, который кажется более уместным), тогда я бы предложил вам add a custom permission где-то в вашей системе, добавить это как разрешение созданной вами группы «Обычный пользователь», а затем просто проверить (с помощью разрешения) наличие этого разрешения ,

В зависимости от вашего варианта использования будет определено, где вы создаете это новое разрешение. Возможно, это на объекте типа UserProfile ...