我试图获取当前登录用户的权限
我下面的当前尝试返回错误
from django.contrib.auth.models import Permission
from django.contrib.auth.models import User
permissions = Permission.objects.filter(user=User.id)
错误
int()参数必须是字符串,类似字节的对象或数字,而不是' DeferredAttribute'
有谁知道我怎么做到这一点?有更简单的方法吗?
由于
答案 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)