Django - 在视图中获取当前用户权限?

时间:2017-10-19 16:58:51

标签: python django

我试图获取当前登录用户的权限

我下面的当前尝试返回错误

   from django.contrib.auth.models import Permission
   from django.contrib.auth.models import User
   permissions = Permission.objects.filter(user=User.id)

错误

  

int()参数必须是字符串,类似字节的对象或数字,而不是' DeferredAttribute'

有谁知道我怎么做到这一点?有更简单的方法吗?

由于

4 个答案:

答案 0 :(得分:4)

您收到错误,因为User是用户模型。您应该使用request.user来访问已登录的用户。

def my_view(request):
    # Individual permissions
    permissions = Permission.objects.filter(user=request.user)

    # Permissions that the user has via a group
    group_permissions = Permission.objects.filter(group__user=request.user)

您应该检查用户是否已登录(例如,使用login_required)。

请注意,用户可能因为他们所在的群组而拥有权限,或者因为他们是超级用户(相当于拥有所有权限)。

答案 1 :(得分:3)

也可以在Django 3.0或更高版本中,根据doc使用:

self.request.user.get_user_permissions()

返回用户直接拥有的一组权限字符串。

或获取所有权限:

self.request.user.get_all_permissions()

答案 2 :(得分:1)

只需更新@Alasdair答案以供其他希望在一行中完成操作的用户使用,

from django.db.models import Q
from django.contrib.auth.models import Permission

# All permissions
permissions = Permission.objects.filter(Q(user=user) | Q(group__user=user)).all()

答案 3 :(得分:0)

如果您尝试使用组权限设置限制,则可以使用以下装饰器。

from django.contrib.auth.decorators import user_passes_test

现在,您可以使用它来检查用户是否在组中。

@user_passes_test(lambda u: u.has_perm('Utilization.can_edit_invoice'))
@login_required
def edit_invoice(request, invoice_pk):
    invoice = Invoice.objects.get(pk=invoice_pk)
    if request.method == 'POST':
        form = forms.AddInvoiceForm(request.POST, instance=invoice)
        if form.is_valid():
            form.save()
            return HttpResponseRedirect(invoice.get_absolute_url())
    else:
        form = forms.AddInvoiceForm(instance=invoice)
        args = {'form':form}
        return render(request, 'Invoice/add_invoice.html', args)