博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
分配权限
阅读量:7294 次
发布时间:2019-06-30

本文共 4423 字,大约阅读时间需要 14 分钟。

  对于后台管理工具,会根据员工的角色不同,从而拥有不同的权限,所能访问的页面不同,首先要给员工分配角色,然后再给角色分配权力,这样就完成了权限分配。其实基于stark组件做的权限管理,我们可以一个一个页面的去完成权限分配,但其实我们有更好的方法去实现,把员工、角色、权力都放在一个页面上,一目了然的查看权限和分配权限,如下图:

  一、上代码

  1,视图函数

  我已经创建好了三张表,分别是UserInfo员工表,Role角色表,Power权力表

def distribute_view(self,request):        user_list=UserInfo.objects.all()        role_list=Role.objects.all()        power_list=Power.objects.all().values('pk','name','url','parent')        power_id_list=[]        uid=request.GET.get('uid')        rid=request.GET.get('rid')        if request.method=='POST':             #这是点击保存按钮的请求路径            user = UserInfo.objects.filter(id=uid)            role = Role.objects.filter(id=rid)            if uid:                              #这是角色上的保存按钮提交的                l = request.POST.getlist("role")                user.first().roles.set(l)            if rid:                             #这是权限上的保存按钮提交                l=request.POST.getlist('power')                pid=[]                for i in l:                    lis=Power.objects.filter(pk=i).first().parents.split('/')                    pid.extend(lis)                    pid.append(i)                pid=list(set(pid))                role.first().power.set(pid)        if uid:                                #这是点击员工名字时发送的请求,用a标签发送            roles=UserInfo.objects.get(pk=uid).roles.all().values_list('pk')            role_id_list=[role[0] for role in roles]            powers=UserInfo.objects.get(pk=uid).roles.filter(power__isnull=False).values_list('power__pk')            power_id_list=[power[0] for power in powers]        if rid:                                #这是点击角色名字时发送的请求,用a标签发送            powers=Role.objects.get(pk=rid).power.all().values_list('pk')            power_id_list = [power[0] for power in powers]        for one in power_list:            if one['url']==None:                one['url']=''        power_json=json.dumps(list(power_list))        return render(request,'distribute.html',locals())

  3,前端页面

  在我的模板里有一个base.html的母版,现在只是继承他,母版里分为三个部分,已经写好的有导航区和左侧菜单,我们只需要完成内容区,然后加进去就行,下面写的就是内容区的内容。

{% extends "base.html" %}{% block css %}    {% endblock %}{% block content %}    
#这是渲染员工那一列面板
用户
{% for user in user_list %} {% if user.pk|safe == uid %} #被点中的颜色变
{% else %}
{% endif %} {% endfor %}
{ { user.name }}
{ { user.name }}
{% csrf_token %}
#这是渲染角色的面板
角色 {% if uid %}
#当点击某个员工的名字时会发送请求,而且携带uid,所以能取到uid,从而把保存按钮给显示出来,其他时候都是不显示的 {% endif %}
{% for role in role_list %} {% if role.id|safe == rid %} #当点击某个角色的名字时会发送请求,并携带rid,所以能取到rid,从而把保存按钮给显示出来,其他时候都不显示
#被点中颜色变
{% if role.id in role_id_list %}
{% else %}
{% endif %}
{% else %}
{% if role.id in role_id_list %}
{% else %}
{% endif %}
{% endif %} {% endfor %}
{ { role.name }}
{ { role.name }}
{% csrf_token %}
#这是渲染权力的面板
权力 {% if rid %}
{% endif %}
{% for power in power_list %} {% if not power.parent %} #在这里只拿到没有父级的菜单,也就是一级菜单
{ { power.name }}
{% endif %} {% endfor %}
{% endblock %}{% block script %} {% endblock %}

  二、功能

  1,直接访问页面

  2,点击用户名字

  此时就可以给员工选择角色,然后点保存,酒后在后台把这位员工的角色给change

  3,点击角色

  现在就可以为角色分配权力,点击保存,就会把角色的权利给change。

 

转载于:https://www.cnblogs.com/12345huangchun/p/10440635.html

你可能感兴趣的文章
[LeetCode] Intersection of Two Linked Lists 求两个链表的交点
查看>>
写给自己看的小设计1 - 面向对象设计总纲
查看>>
SQL点滴22—性能优化没有那么神秘
查看>>
cocos2d-js 入门 (主要是HTML5)
查看>>
Axiom3D:手动创建ManualObject与Mesh,以及如何使用Cg着色器语言
查看>>
利用Visual Studio 2013 开发微软云Windows Azure配置指南(针对中国大陆)
查看>>
web运维第一篇:nginx配置文件详解笔记
查看>>
[转]c++ virtual public的含义和作用
查看>>
Yii rules常用规则
查看>>
IOS 多个UIImageView 加载高清大图时内存管理
查看>>
php会话全揭秘
查看>>
【转】android应用程序签名
查看>>
Winform在线更新
查看>>
varchar(n)和varchar(max)有什么区别
查看>>
【转】WPS文档怎么清除格式
查看>>
aliyun 启用ECS iptables
查看>>
nginx优化之请求直接返回json数据
查看>>
JS魔法堂:被玩坏的innerHTML、innerText、textContent和value属性
查看>>
代理模式 自己写的
查看>>
C#开发微信门户及应用(26)-公众号微信素材管理
查看>>