一.角色展示
角色展示:
def role(request):
all_role = models.Role.objects.all()
return render(request,'rbac/role_list.html',{'all_role':all_role})
角色添加和编辑:
def role_add_edit(request,rid=None):
role_obj = models.Role.objects.filter(pk=rid).first()
form_obj = RoleModel(instance=role_obj)
if request.method == 'GET':
return render(request,'rbac/form.html',{'form_obj':form_obj})
else:
form_obj = RoleModel(request.POST,instance=role_obj)
if form_obj.is_valid():
form_obj.save()
return redirect('')
else:
return render(request, 'rbac/form.html', {'form_obj': form_obj})
删除角色:
def role_del(request,rid):
models.Role.objects.filter(pk=rid)
return redirect('')
页面效果:
二.菜单展示
显示一级和二级菜单:
def menu_list(request):
all_menu = models.Menu.objects.all()
all_permission = models.Permission.objects.all()
return render(request,'',{'all_menu':all_menu,'all_permission':all_permission})
菜单编辑添加:
def menu_add_edit(request,mid=None):
menu_obj = models.Menu.objects.filter(pk=mid).first()
form_obj = MenuModel(instance=menu_obj)
if request.method == 'GET':
return render(request,'rbac/menu_list.html',{'form_obj':form_obj})
else:
form_obj = MenuModel(request.POST,instance=menu_obj)
if form_obj.is_valid():
form_obj.save()
return redirect('')
else:
return render(request, 'rbac/menu_list.html', {'form_obj': form_obj})
删除菜单:
def menu_del(request,mid):
models.Menu.objects.filter(pk=mid).delete()
return redirect('')
页面效果:
点击一级菜单只显示以及菜单对应的子菜单:
def menu_list(request):
mid = request.GET.get('mid')
all_menu = models.Menu.objects.all()
if mid:
all_permission = models.Permission.objects.filter(Q(menus_id=mid)| Q(parent__menus_id=mid)) # 一级菜单或者一级菜单的子菜单
else:
all_permission = models.Permission.objects.all()
return render(request,'',{'all_menu':all_menu,'all_permission':all_permission})
将一级菜单的子菜单划归到一级菜单中去:
def menu_list(request):
mid = request.GET.get('mid')
all_menu = models.Menu.objects.all()
if mid:
all_permission = models.Permission.objects.filter(Q(menus_id=mid)| Q(parent__menus_id=mid)).values('menus_id','menus__title','id','url','url_name','parent_id','title','parent__title') # 一级菜单或者一级菜单的子菜单
else:
all_permission = models.Permission.objects.all().values('menus_id','menus__title','id','url','url_name','parent_id','title','parent__title')
#
all_permission_dict = {}
for i in all_permission:
if i.get('menus_id'): # 一级菜单
all_permission_dict[i.get('id')] = i
i['children'] = [] # 给一级菜单中加一个children列表用于放一级菜单下的子菜单
for k in all_permission:
pid = k.get('parent_id')
if pid:
all_permission_dict[pid]['children'] = k
return render(request,'',{'all_menu':all_menu,'all_permission_dict':all_permission_dict,'mid':mid})
html:
{% extends 'layout.html' %}
{% block css %}
<style>
.permission-area tr.parent {
background-color: #cae7fd;;
}
.menu-body tr.active {
background-color: #f1f7fd;
border-left: 3px solid #fdc00f;
}
</style>
{% endblock %}
{% block content %}
<div style="margin-top: 20px">
<div class="col-sm-3">
<div class="panel panel-default">
<div class="panel-heading"><i class="fa fa-book"></i>菜单管理<a href="{% url 'rbac:menu_add' %}"
class="btn btn-success pull-right" style="padding: 2px 8px;margin: -3px"><i class="fa fa-plus"></i>新建</a></div>
<div class="panel-body">
<table class="table table-hover" style="margin-top: 5px">
<thead>
<tr>
<th>名称</th>
<th>图标</th>
<th>操作</th>
</tr>
</thead>
<tbody class="menu-body">
{% for menu in all_menu %}
<tr class="{% if mid == menu.id|safe %}active{% endif %}"> {# 一级菜单等于一级菜单时 mid:一级菜单 menu.id:一级菜单 #}
<td><a href="{% url 'rbac:menu_list' %}?mid={{ menu.id }}">{{ menu.title }}</a></td>
<td><i class="fa {{ menu.icon }}"></i></td>
<td>
<a href="{% url 'rbac:menu_edit' menu.id %}"> <i class="fa fa-edit"></i> </a>
<a href="{% url 'rbac:menu_del' menu.id %}"> <i class="fa fa-trash-o"></i> </a>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
</div>
<div class="col-sm-9">
<div class="panel panel-default">
<div class="panel-heading"><i class="fa fa-cubes"></i> 权限管理
<a href="" class="btn btn-primary btn-sm pull-right "
style="padding: 2px 8px;margin: -3px;"> <i class="fa fa-scissors"></i> 批量操作</a>
<a href="{% url 'rbac:permission_add' %}" class="btn btn-success btn-sm pull-right "
style="padding: 2px 8px;margin: -3px;"> <i class="fa fa-plus"></i> 新建</a>
</div>
<div class="panel-body">
<table class="table table-hover" style="margin-top: 5px">
<thead>
<tr>
<th>名称</th>
<th>URL</th>
<th>URL别名</th>
<th>菜单</th>
<th>所属菜单</th>
<th>操作</th>
</tr>
</thead>
<tbody class="permission-area">
{% for parent_permission in all_permission_dict.values %}
<tr class="parent">
<td><i class="fa fa-caret-down icon"></i>{{ parent_permission.title }}</td>
<td>{{ parent_permission.url }}</td>
<td>{{ parent_permission.url_name }}</td>
<td>{{ parent_permission.menus__title }}</td>
{# <td>{{ parent_permission.parent__title|default:'无' }}</td>#}
<td></td>
<td>
<a href=""> <i class="fa fa-edit"></i> </a>
<a href=""> <i class="fa fa-trash-o"></i> </a>
</td>
</tr>
{% for child_permission in parent_permission.children %}
<tr>
<td>{{ child_permission.title }}</td>
<td>{{ child_permission.url }}</td>
<td>{{ child_permission.url_name }}</td>
<td></td>
<td>{{ child_permission.parent__title }}</td>
<td>
<a href=""> <i class="fa fa-edit"></i> </a>
<a href=""> <i class="fa fa-trash-o"></i> </a>
</td>
</tr>
{% endfor %}
{% endfor %}
</tbody>
</table>
</div>
</div>
</div>
</div>
{% endblock %}
{% block js %}
<script>
$('.parent').click(function () {
$(this).find('.icon').toggleClass('fa-caret-right');
$(this).nextUntil('.parent').toggleClass('hidden');
})
</script>
{% endblock %}