permission.py 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. #!/usr/bin/env python
  2. #-*- coding: utf-8 -*-
  3. from django.core.urlresolvers import reverse
  4. from django.http import HttpResponse,HttpResponseRedirect
  5. from django.shortcuts import render_to_response,RequestContext
  6. from django.contrib.auth.decorators import login_required
  7. from swyzxwb_photovote.common.CommonPaginator import SelfPaginator
  8. from UserManage.forms import PermissionListForm
  9. from UserManage.models import User,RoleList,PermissionList
  10. def PermissionVerify():
  11. '''权限认证模块,
  12. 此模块会先判断用户是否是管理员(is_superuser为True),如果是管理员,则具有所有权限,
  13. 如果不是管理员则获取request.user和request.path两个参数,判断两个参数是否匹配,匹配则有权限,反之则没有。
  14. '''
  15. def decorator(view_func):
  16. def _wrapped_view(request, *args, **kwargs):
  17. iUser = User.objects.get(username=request.user)
  18. if not iUser.is_superuser: #判断用户如果是超级管理员则具有所有权限
  19. if not iUser.role: #如果用户无角色,直接返回无权限
  20. return HttpResponseRedirect(reverse('permissiondenyurl'))
  21. role_permission = RoleList.objects.get(name=iUser.role)
  22. role_permission_list = role_permission.permission.all()
  23. matchUrl = []
  24. for x in role_permission_list:
  25. if request.path == x.url or request.path.rstrip('/') == x.url: #精确匹配,判断request.path是否与permission表中的某一条相符
  26. matchUrl.append(x.url)
  27. elif request.path.startswith(x.url): #判断request.path是否以permission表中的某一条url开头
  28. matchUrl.append(x.url)
  29. else:
  30. pass
  31. print '%s---->matchUrl:%s' %(request.user,str(matchUrl))
  32. if len(matchUrl) == 0:
  33. return HttpResponseRedirect(reverse('permissiondenyurl'))
  34. else:
  35. pass
  36. return view_func(request, *args, **kwargs)
  37. return _wrapped_view
  38. return decorator
  39. @login_required
  40. def NoPermission(request):
  41. kwvars = {
  42. 'request':request,
  43. }
  44. return render_to_response('UserManage/permission.no.html',kwvars,RequestContext(request))
  45. @login_required
  46. @PermissionVerify()
  47. def AddPermission(request):
  48. if request.method == "POST":
  49. form = PermissionListForm(request.POST)
  50. if form.is_valid():
  51. form.save()
  52. return HttpResponseRedirect(reverse('listpermissionurl'))
  53. else:
  54. form = PermissionListForm()
  55. kwvars = {
  56. 'form':form,
  57. 'request':request,
  58. }
  59. return render_to_response('UserManage/permission.add.html',kwvars,RequestContext(request))
  60. @login_required
  61. @PermissionVerify()
  62. def ListPermission(request):
  63. mList = PermissionList.objects.all()
  64. #分页功能
  65. lst = SelfPaginator(request,mList, 20)
  66. kwvars = {
  67. 'lPage':lst,
  68. 'request':request,
  69. }
  70. return render_to_response('UserManage/permission.list.html',kwvars,RequestContext(request))
  71. @login_required
  72. @PermissionVerify()
  73. def EditPermission(request,ID):
  74. iPermission = PermissionList.objects.get(id=ID)
  75. if request.method == "POST":
  76. form = PermissionListForm(request.POST,instance=iPermission)
  77. if form.is_valid():
  78. form.save()
  79. return HttpResponseRedirect(reverse('listpermissionurl'))
  80. else:
  81. form = PermissionListForm(instance=iPermission)
  82. kwvars = {
  83. 'ID':ID,
  84. 'form':form,
  85. 'request':request,
  86. }
  87. return render_to_response('UserManage/permission.edit.html',kwvars,RequestContext(request))
  88. @login_required
  89. @PermissionVerify()
  90. def DeletePermission(request,ID):
  91. PermissionList.objects.filter(id = ID).delete()
  92. return HttpResponseRedirect(reverse('listpermissionurl'))