mirror of
https://github.com/RobbieHan/sandboxMP.git
synced 2026-02-03 10:53:15 +08:00
118 lines
3.9 KiB
Python
118 lines
3.9 KiB
Python
# @Time : 2018/11/13 23:25
|
|
# @Author : RobbieHan
|
|
# @File : views_role.py
|
|
|
|
import json
|
|
|
|
from django.views.generic.base import View
|
|
from django.shortcuts import HttpResponse, get_object_or_404
|
|
from django.views.generic import TemplateView
|
|
from django.contrib.auth import get_user_model
|
|
from django.shortcuts import render
|
|
|
|
from .mixin import LoginRequiredMixin
|
|
from .models import Role, Menu
|
|
from custom import SandboxCreateView, SandboxUpdateView, BreadcrumbMixin
|
|
|
|
User = get_user_model()
|
|
|
|
|
|
class RoleView(LoginRequiredMixin, BreadcrumbMixin, TemplateView):
|
|
template_name = 'system/role.html'
|
|
|
|
|
|
class RoleCreateView(SandboxCreateView):
|
|
model = Role
|
|
fields = '__all__'
|
|
|
|
|
|
class RoleListView(LoginRequiredMixin, 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 RoleUpdateView(SandboxUpdateView):
|
|
model = Role
|
|
fields = '__all__'
|
|
template_name_suffix = '_update'
|
|
|
|
|
|
class RoleDeleteView(LoginRequiredMixin, 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 Role2UserView(LoginRequiredMixin, View):
|
|
"""
|
|
角色关联用户
|
|
"""
|
|
|
|
def get(self, request):
|
|
if 'id' in request.GET and request.GET['id']:
|
|
role = get_object_or_404(Role, pk=int(request.GET.get('id')))
|
|
added_users = role.userprofile_set.all()
|
|
all_users = User.objects.all()
|
|
un_add_users = set(all_users).difference(added_users)
|
|
ret = dict(role=role, added_users=added_users, un_add_users=list(un_add_users))
|
|
return render(request, 'system/role_role2user.html', ret)
|
|
|
|
def post(self, request):
|
|
res = dict(result=False)
|
|
id_list = None
|
|
role = get_object_or_404(Role, pk=int(request.POST.get('id')))
|
|
if 'to' in request.POST and request.POST['to']:
|
|
id_list = map(int, request.POST.getlist('to', []))
|
|
role.userprofile_set.clear()
|
|
if id_list:
|
|
for user in User.objects.filter(id__in=id_list):
|
|
role.userprofile_set.add(user)
|
|
res['result'] = True
|
|
return HttpResponse(json.dumps(res), content_type='application/json')
|
|
|
|
|
|
class Role2MenuView(LoginRequiredMixin, 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, 'system/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['id'])
|
|
role.permissions.add(menu_checked)
|
|
res['result'] = True
|
|
return HttpResponse(json.dumps(res), content_type='application/json')
|
|
|
|
|
|
class Role2MenuListView(LoginRequiredMixin, View):
|
|
"""
|
|
获取zTree菜单列表
|
|
"""
|
|
def get(self, request):
|
|
fields = ['id', 'name', 'parent']
|
|
if 'id' in request.GET and request.GET['id']:
|
|
role = Role.objects.get(id=request.GET.get('id'))
|
|
role_menus = role.permissions.values(*fields)
|
|
ret = dict(data=list(role_menus))
|
|
else:
|
|
menus = Menu.objects.all()
|
|
ret = dict(data=list(menus.values(*fields)))
|
|
return HttpResponse(json.dumps(ret), content_type='application/json') |