Python Django—实现授权的最佳方式(基于每个角色以及每个用户)?
我正在开发django web应用程序,它需要两种授权:Python Django—实现授权的最佳方式(基于每个角色以及每个用户)?,python,django,django-views,django-urls,Python,Django,Django Views,Django Urls,我正在开发django web应用程序,它需要两种授权: 基于角色(用户不能访问其他角色的URL) 基于用户(相同角色的用户不能访问其他用户的内容) 例如,我们有一个名为HOD(部门负责人)的角色。以下是他们可以访问的一些URL: url(r'^retest/(?P<retest_id>[0-9]+)/$' , views.details, name='details' ), url(r'^retest/(?P<retest_id>[0-9]+)/acce
url(r'^retest/(?P<retest_id>[0-9]+)/$' , views.details, name='details' ),
url(r'^retest/(?P<retest_id>[0-9]+)/accept$' , views.accept, name='accept' ),
url(r'^retest/(?P<retest_id>[0-9]+)/request$' , views.request, name='request' ),
url(r'^retest/(?P<retest_id>[0-9]+)/accepted$' , views.accepted, name='accepted' ),
url(r'^retest/(?P<retest_id>[0-9]+)/retreq$' , views.retreq, name='retreq' )
现在,这些是我所关注的问题,我想对此加以防范:
我应该改变URL的设置方式吗?我不是专家,但我个人会使用内置的django权限系统。它将解决您的两个问题,您可以使用所需的
权限
函数装饰器轻松实现它
一些有用的提示是:如果您的视图相似并且希望保持干燥,可以考虑使用基于类的视图而不是基于函数的视图,并且可以在URL模式本身(在URL.py中)而不是视图函数上使用装饰器。权限可以解决基于角色的身份验证问题。但是基于用户的身份验证呢?我是否需要在每个函数中编写额外的身份验证代码?@AllenGJ您可以在每个函数中编写身份验证代码,但我认为创建自己的自定义权限可能是更好的选择。
@login_required
def details(request, retest_id):
try:
retest= Retest.objects.get(pk=retest_id)
except Retest.DoesNotExist:
raise Http404("Request does not exit")
return render(request, 'retest/details.html' , { 'retest': retest })
@login_required
def accept(request, retest_id):
retest = get_object_or_404(Retest, pk=retest_id)
# update is_hod attribute only if the request is a POST.
if request.method == 'POST':
retest.is_hod = True
retest.save(update_fields=['is_hod'])
return render(request, 'retest/details.html' , {'retest': retest})