You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Django Admin中将用户加入组后,如何在视图中引用用户及权限?

在Django视图中获取用户及组权限的方法

当然可以,Django会自动处理用户组的权限继承,你完全可以在视图中直接引用当前用户及其所属组的权限。以下是具体操作方法:

1. 获取当前登录用户

在视图中,通过request.user即可获取当前请求的用户对象。注意:未登录用户会返回AnonymousUser,需要先判断用户是否已认证:

if request.user.is_authenticated:
    # 处理已登录用户的权限逻辑
    pass

2. 检查用户是否拥有特定权限

使用user.has_perm('权限编码')方法,该方法会自动检查用户自身的权限以及所属组的权限,返回布尔值。权限编码格式为app_label.权限动作_模型名,例如:

  • 允许修改library应用下的Book模型:library.change_book
  • 允许删除blog应用下的Article模型:blog.delete_article

示例代码:

def check_permission_view(request):
    if request.user.is_authenticated:
        # 检查是否有修改书籍的权限
        can_edit_book = request.user.has_perm('library.change_book')
        # 检查是否有添加文章的权限
        can_add_article = request.user.has_perm('blog.add_article')
        return render(request, 'permission_check.html', {
            'can_edit_book': can_edit_book,
            'can_add_article': can_add_article
        })

3. 获取用户的所有权限

可以通过以下方法获取用户的权限集合:

  • user.get_all_permissions():返回用户所有权限(自身权限+组权限)的编码集合
  • user.get_group_permissions():仅返回用户所属组的权限编码集合
  • user.user_permissions.all():返回用户自身单独拥有的权限对象列表(不含组权限)

示例代码:

def list_permissions_view(request):
    if request.user.is_authenticated:
        all_perms = request.user.get_all_permissions()
        group_perms = request.user.get_group_permissions()
        user_perms = request.user.user_permissions.all()
        return render(request, 'permissions_list.html', {
            'all_perms': all_perms,
            'group_perms': group_perms,
            'user_perms': user_perms
        })

4. 基于权限限制视图访问

对于类视图,可以使用UserPassesTestMixin来限制只有拥有特定权限的用户才能访问:

from django.contrib.auth.mixins import UserPassesTestMixin
from django.views.generic import TemplateView

class BookManageView(UserPassesTestMixin, TemplateView):
    template_name = 'book_manage.html'
    
    def test_func(self):
        # 仅允许拥有修改书籍权限的用户访问
        return self.request.user.has_perm('library.change_book')

注意事项

  • 自定义权限也遵循同样的规则,只要在Django Admin中分配给组或用户,就能通过上述方法获取
  • 权限编码中的app_label是你应用的名称,权限动作通常为add/change/delete/view,也可以自定义

内容的提问来源于stack exchange,提问作者devocip

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 05:24:17