权限控制到按钮级别 : 
        1.思路 : 
                由于每个按钮都能认为是一个权限,所以每个按钮都会有一个自己的路径,这些路径都在用户登录时保存在了session中,django在渲染页面之前先进行权限的匹配,如果用户没有某个按钮的权限,那么这个按钮就不会被渲染,从而实现权限的控制.
                重点在于能快速的在session中搜索所有的用户权限,之前在session中保存的数据是以一级菜单的id作为key,所以在遍历时候会占用过多资源,而从数据库中去找也比较浪费时间.所以可以在session中保存权限数据时就以定义的url别名来做key,这样就可以快速匹配权限.
        2.修改表结构,增加name字段保存路径的别名 :
class Permission(models.Model):
'''
权限表
'''
url = models.CharField(max_length=256, verbose_name='权限', unique=True)
title = models.CharField(max_length=32, verbose_name='标题')
menu = models.ForeignKey('Menu', blank=True, null=True)
parent = models.ForeignKey('Permission', blank=True, null=True)
name = models.CharField(max_length=32, verbose_name='URL别名', unique=True) def __str__(self):
return self.title
        3.以上表中的别名字段作为key保存在session中,并保存pemissions__parent__name字段(因为当上表中的permissions__parent_id存在时,pemissions__parent__name即对应的二级权限的name).
for item in permission_query:
permission_dict[item['permissions__name']] = ({
'url':item['permissions__url'],
'pid':item['permissions__parent_id'],
'id': item['permissions__id'],
'title': item['permissions__title'],
'pname': item['permissions__parent__name']
})
        4.通过自定义filter判断是否显示标签 : (注意传参)
@register.filter()
def has_permission(request,name):
if name in request.session.get(settings.PERMISSION_SESSION_KEY):
return True
        5.在前端对每个按钮做判断 :

<td>
{% if request|has_permission:'customer_edit' %}
<a style="color: #333333;" href="/customer/edit/{{ row.id }}/">
<i class="fa fa-edit" aria-hidden="true"></i></a>
{% endif %} {% if request|has_permission:'customer_del' %}
<a style="color: #d9534f;" href="/customer/del/{{ row.id }}/"><i
class="fa fa-trash-o"></i></a>
{% endif %} </td>
        6.注意对session数据变化带来的错误做修改 :
for permission in permission_dict.values():

    if re.match(r'^{}$'.format(permission['url']), url):
pid = permission.get('pid')
id = permission.get('id')
pname = permission.get('pname') #之前没有
if pid:
request.current_menu_id = pid
request.breadcrumb_list.append(
{'title': permission_dict[pname]['title'], 'url': permission_dict[pname]['url']}) #之前为permission_dict[str(pid)]['']
request.breadcrumb_list.append({'title': permission['title'], 'url': permission['url']})

  

 

django中权限控制到按钮级别的更多相关文章

  1. crm 一级菜单排序,二级菜单选中并且展开,非菜单权限的归属,权限粒度控制到按钮级别

    排序 /rbac/templatetags/rbac.py from django import template from django.conf import settings import re ...

  2. rbac之 权限粒度控制到按钮级别

    rbac之 权限粒度控制到按钮级别:  这里的意思就是 如果当前用户,没有这个权限. 那么这个相对应的这个按钮的权限, 就不应该展示.看都不能给看到. 思路: 为每一个权限,设置一个别名.  这里是这 ...

  3. Spring Cloud实战 | 第十一篇:Spring Cloud Gateway 网关实现对RESTful接口权限控制和按钮权限控制

    一. 前言 hi,大家好,这应该是农历年前的关于开源项目 的最后一篇文章了. 有来商城 是基于 Spring Cloud OAuth2 + Spring Cloud Gateway + JWT实现的统 ...

  4. django通用权限控制框架

    在web项目中根据不同的用户肯定会限制其不同的权限,利用以下模块可以满足日常几乎所有的权限控制 permission_hook.py  # 自定义权限控制,必须返回True/false  ,True表 ...

  5. ASP.NET MVC中权限控制的简单实现

    1.重写AuthorizeAttribute类,用自己的权限控制逻辑重写AuthorizeCore方法 public class MyAuthorizeAttribute : AuthorizeAtt ...

  6. 第十二章:Linux中权限控制实例

    前言 前文对 Linux 中的权限进行了较为透彻的分析.而本文,则在前文的基础上,具体说明如何在代码中进行权限控制. 下面的代码涉及到以下几个方面: 1. 创建文件时设置文件权限 2. 修改文件的默认 ...

  7. Linux 中权限控制实例

    前言 前文对 Linux 中的权限进行了较为透彻的分析.而本文,则在前文的基础上,具体说明如何在代码中进行权限控制. 下面的代码涉及到以下几个方面: 1. 创建文件时设置文件权限 2. 修改文件的默认 ...

  8. Vue 自定义指令实现权限控制(按钮级)

    在用户登陆后,根据用户id读取用户的所有权限数据,放入本地的sessionStorage进行存储(这里我是拿到权限按钮按钮的标识,英文名称.把他们合成一个字符串存储在 btnPowerString 中 ...

  9. vue + django 的权限控制

    用vue做前端页面, Django 提供api, 写了一个后台系统,结合方式是vue打包后的dist目录直接作为Django的静态目录, 这样的好处是不用配置Nginx具体的做法不在这里写了,记一下遇 ...

随机推荐

  1. python+unittest框架第一天unittest之简单认识Test Fixure:测试固件【8月17更新】

    20万的慢慢会实现的吧,hhh unittest框架,我就不在介绍了,百度有很详细的介绍. 我们只要了解: 1.unittest是单元测试框架 2.它提供用例组织与执行:在实际工作中案例可能有上百条, ...

  2. PCL学习(一)从PLY文件读入点云数据

    #include <iostream> #include <pcl/io/pcd_io.h> #include <pcl/point_types.h> #inclu ...

  3. HttpClient的几种请求方式

    public static String doPostToken(String tokenUrl,String clientId,String clientSecret,String grantTyp ...

  4. Appium+python启动虚拟机上的app

    查看appPackage和appActivity方法: 1.先在cmd命令行输入  adb logcat ActivityManager:I *:s 2.点击虚拟机启动app即可查看,/前是appPa ...

  5. 病毒 | wordpress网站内容被篡改、自动跳转、变全英文的解决办法

    去年10月开始,网站经常有文章被莫名其妙的篡改,而且后面还经常出现跳转到色情网站的问题,让人烦不胜烦,困扰了好几个月,最后终于解决了.这里特次记录和总结下此次恼人的事件. 时间:2018年10月 问题 ...

  6. B-JUI文档、下载

    概述 特别说明 本文档仅适用于最新版的B-JUI,网站首页或下载页可以查看B-JUI的最后更新时间. B-JUI前端管理框架适用于快速开发各类WEB管理系统,可与任意后端程序(java.php..ne ...

  7. (三)ActiveMQ之发布- 订阅消息模式实现

    一.概念 发布者/订阅者模型支持向一个特定的消息主题发布消息.0或多个订阅者可能对接收来自特定消息主题的消息感兴趣.在这种模型下,发布者和订阅者彼此不知道对方.这种模式好比是匿名公告板.这种模式被概括 ...

  8. 在论坛中出现的比较难的sql问题:2(row_number函数+子查询)

    原文:在论坛中出现的比较难的sql问题:2(row_number函数+子查询) 2.如何去掉字段内的重复.

  9. Html5+Mui前端框架,开发记录(一)

    1.下载HBuilder X,地址:http://www.dcloud.io/hbuilderx.html,根据需求选择版本下载. Mui文档,地址:http://dev.dcloud.net.cn/ ...

  10. 【转载】salesforce 零基础开发入门学习(四)多表关联下的SOQL以及表字段Data type详解

    salesforce 零基础开发入门学习(四)多表关联下的SOQL以及表字段Data type详解   建立好的数据表在数据库中查看有很多方式,本人目前采用以下两种方式查看数据表. 1.采用schem ...