django - 仅对特定用户组访问的URL模式
有没有办法限制某些Django用户访问特定的URL模式?
比如说,所有以 /settings/
开头的链接,只能让管理组的用户访问。
或者,也许可以创建一个新的装饰器,比如 @group("administration")
,然后把它加到每个需要限制访问的视图上?
我个人比较喜欢第二种方法,如果可以的话。
2 个回答
1
你可能想要做以下两件事:
- 给这个组添加一个特定的权限,然后使用 permission_required:https://docs.djangoproject.com/en/2.1/topics/auth/default/#the-permission-required-decorator
或者
- 检查用户是否在这个组里,可以用 user_passes_test:https://docs.djangoproject.com/en/2.1/topics/auth/default/#django.contrib.auth.decorators.user_passes_test
5
Django提供了一个叫做 user_passes_test
的装饰器,专门用来做这个事情。你可以把任何一个函数传给它,如果这个函数返回的是假值,那么这个视图就不会被显示出来。
下面的例子解释得更清楚:
from django.contrib.auth.decorators import user_passes_test
def email_check(user):
return '@example.com' in user.email
@user_passes_test(email_check)
def my_view(request):
...
在你的情况下,你想检查用户是否在某个特定的组里:
def in_admin_group(user):
return 'administration' in user.groups