131 lines
4.7 KiB
Python
131 lines
4.7 KiB
Python
import json
|
|
import re
|
|
|
|
from django.views.generic.base import View
|
|
from django.shortcuts import HttpResponse, get_object_or_404
|
|
from django.views.generic import TemplateView,CreateView,UpdateView
|
|
from django.contrib.auth import get_user_model
|
|
from django.shortcuts import render
|
|
from django.forms.models import model_to_dict
|
|
from safesite.models import Role,Menu
|
|
|
|
|
|
class RoleView(TemplateView):
|
|
template_name = 'groups/role.html'
|
|
|
|
|
|
class RoleListView(View):
|
|
def get(self, reqeust):
|
|
fields = ['id', 'name', 'desc']
|
|
ret = dict(data=list(Role.objects.values(*fields)))
|
|
return HttpResponse(json.dumps(ret), content_type='application/json')
|
|
|
|
|
|
class RoleCreateView(CreateView):
|
|
model = Role
|
|
fields = '__all__'
|
|
template_name = 'groups/role_form.html'
|
|
def post(self, request, *args, **kwargs):
|
|
res = dict(result=False)
|
|
form = self.get_form()
|
|
if form.is_valid():
|
|
form.save()
|
|
res['result'] = True
|
|
else:
|
|
pattern = '<li>.*?<ul class=.*?><li>(.*?)</li>'
|
|
form_errors = str(form.errors)
|
|
errors = re.findall(pattern, form_errors)
|
|
res['error'] = errors[0]
|
|
return HttpResponse(json.dumps(res), content_type='application/json')
|
|
|
|
|
|
class RoleDeleteView(View):
|
|
def post(self, request):
|
|
ret = dict(result=False)
|
|
if 'id' in request.POST and request.POST['id']:
|
|
id_list = map(int, request.POST['id'].split(','))
|
|
Role.objects.filter(id__in=id_list).delete()
|
|
ret['result'] = True
|
|
return HttpResponse(json.dumps(ret), content_type='application/json')
|
|
|
|
|
|
class RoleUpdateView(UpdateView):
|
|
model = Role
|
|
fields = '__all__'
|
|
template_name = 'groups/role_update.html'
|
|
template_name_suffix = '_update'
|
|
|
|
def get_object(self, queryset=None):
|
|
|
|
if queryset is None:
|
|
queryset = self.get_queryset()
|
|
if 'id' in self.request.GET and self.request.GET['id']:
|
|
queryset = queryset.filter(id=int(self.request.GET['id']))
|
|
elif 'id' in self.request.POST and self.request.POST['id']:
|
|
queryset = queryset.filter(id=int(self.request.POST['id']))
|
|
else:
|
|
raise AttributeError("Generic detail view %s must be called with id. "
|
|
% self.__class__.__name__)
|
|
try:
|
|
obj = queryset.get()
|
|
except queryset.model.DoesNotExist:
|
|
raise Http404("No %(verbose_name)s found matching the query" %
|
|
{'verbose_name': queryset.model._meta.verbose_name})
|
|
return obj
|
|
|
|
def post(self, request, *args, **kwargs):
|
|
self.object = self.get_object()
|
|
res = dict(result=False)
|
|
form = self.get_form()
|
|
if form.is_valid():
|
|
form.save()
|
|
res['result'] = True
|
|
else:
|
|
pattern = '<li>.*?<ul class=.*?><li>(.*?)</li>'
|
|
form_errors = str(form.errors)
|
|
errors = re.findall(pattern, form_errors)
|
|
res['error'] = errors[0]
|
|
return HttpResponse(json.dumps(res), content_type='application/json')
|
|
|
|
class Role2MenuView(View):
|
|
"""
|
|
角色绑定菜单
|
|
"""
|
|
def get(self, request):
|
|
if 'id' in request.GET and request.GET['id']:
|
|
role = get_object_or_404(Role, pk=request.GET['id'])
|
|
ret = dict(role=role)
|
|
return render(request, 'groups/role_role2menu.html', ret)
|
|
|
|
def post(self, request):
|
|
res = dict(result=False)
|
|
role = get_object_or_404(Role, pk=request.POST['id'])
|
|
tree = json.loads(self.request.POST['tree'])
|
|
role.permissions.clear()
|
|
for menu in tree:
|
|
if menu['checked'] is True:
|
|
menu_checked = get_object_or_404(Menu, pk=menu['menuid'])
|
|
role.permissions.add(menu_checked)
|
|
res['result'] = True
|
|
return HttpResponse(json.dumps(res), content_type='application/json')
|
|
|
|
class Role2MenuListView(View):
|
|
"""
|
|
获取zTree菜单列表
|
|
"""
|
|
def get(self, request):
|
|
fields = ['menuid', 'menuname', 'parentid']
|
|
menus = Menu.objects.all()
|
|
if 'id' in request.GET and request.GET['id']:
|
|
role = Role.objects.get(id=request.GET.get('id'))
|
|
role_menus = role.permissions.all().values_list('menuid',flat=True)
|
|
menusqlist = menus.values(*fields)
|
|
for i in menusqlist:
|
|
if i['menuid'] in role_menus:
|
|
i['checked'] = True
|
|
else:
|
|
i['checked'] = False
|
|
ret = dict(data=list(menusqlist))
|
|
else:
|
|
ret = dict(data=list(menus.values(*fields)))
|
|
return HttpResponse(json.dumps(ret), content_type='application/json') |