首先在models.py里先加入我们需要的表

Meta里的参数自己定义,我这里定义了3个,作为我的权限分类,定义好之后我们可以在django-admin里看到我们的权限分类,当我们添加用户的时候也可以指定这3个权限给用户。

class Permission(models.Model):

name = models.CharField("权限名称", max_length=64)

url = models.CharField('URL名称', max_length=255)

per_method = models.CharField('请求方法', max_length=10)

describe = models.CharField('描述', max_length=255)

def __str__(self):

return self.name

class Meta:

verbose_name = '权限表'

verbose_name_plural = verbose_name

#权限信息,这里定义的权限的名字,后面是描述信息,描述信息是在django admin中显示权限用的

permissions = (

('readonly', '全平台只读'),

('app_admin','平台管理员权限'),

('dashboard','仪表盘只读'),

定义好我们的权限表,我们再定义个权限判断的方法

在models.py的同级目录下新建一个permission.py,名字随意定

# -*- coding:utf-8 -*-

from django.shortcuts import render

from app.models import *

from django.db.models import Q

from django.urls import resolve #此方法可以将url地址转换成url的name

import logging

from logging.handlers import TimedRotatingFileHandler

logger = logging.getLogger("ALERT LOG FORMAT")

logger.setLevel(logging.DEBUG)

LOG_FILE="/tmp/alert.log"

fh = TimedRotatingFileHandler(LOG_FILE,when='D',interval=1,backupCount=30) #按天分割日志,保留30天

fh.setLevel(logging.DEBUG)

formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")

fh.setFormatter(formatter)

logger.addHandler(fh)

def perm_check(request, *args, **kwargs):

user_perm = list(request.user.get_all_permissions()) #获取用户权限

if len(user_perm) < 0:

print("用户没有权限")

return False

user_method = request.method #获取用户的方法get|post

# get_perm = Permission.objects.filter(name=user_perm) #使用用户权限名称查找用户的具体权限

url_obj = resolve(request.path_info)

url_name = url_obj.url_name #获取当前用户访问的url地址

for perm in user_perm:

query = Permission.objects.filter(name=perm.split(".")[1])

print(query)

method = query[0].per_method

url = query[0].url

if url == "ALL" and method == "ALL":

print("用户具有平台管理员权限")

return True

elif url == "ALL" and method == "GET":

print("用户具有平台只读权限")

return True

else:

if url_name == url and user_method == method:

print("权限已经匹配")

return True

else:

print("权限没有匹配")

return False

def check_permission(fun): #定义一个装饰器,在views中应用

def wapper(request, *args, **kwargs):

if perm_check(request, *args, **kwargs): #调用上面的权限验证方法

return fun(request, *args, **kwargs)

return render(request, '403.html', locals())

return wapper

这个方法会提取用户的权限和上面我们定义的表中的权限相匹配,成功的返回True,否则返回False

下面是我简单定义的权限

(root[@127.0.0.1](https://my.oschina.net/u/567043):)[app]> select * from app_permission;

+----+-----------+-----------+------------+-----------------------+

| id | name | url | per_method | describe |

+----+-----------+-----------+------------+-----------------------+

| 1 | dashboard | dashboard | GET | 主页浏览权限 |

| 2 | app_admin | ALL | ALL | 平台管理员权限 |

| 4 | readonly | ALL | GET | 全平台只读 |

+----+-----------+-----------+------------+-----------------------+

好了,最后在views里调用

from app.permission import check_permission

@csrf_exempt

@check_permission

def backup_recovery(request):

if request.user == "AnonymousUser":

return HttpResponseRedirect('/login')

data = backup_failure.objects.all()

return render(request,'backup_recovery.html',{'data':data})

简单的使用装饰器的方法调用一下即可。

django权限系统实现步骤_在django中实现一个简单的权限管理相关推荐

  1. django权限系统实现步骤_博主营地 | Unity红点系统如何实现?超全步骤分享

    「Unity博主营地第一期」于2019年11月开启,现已收到数百篇原创投稿.每周根据Unity Connect社区反馈,帮助大家发现最优质.最干货.最受欢迎的博文作品. 在使用Unity开发游戏的时候 ...

  2. java 线图_在Java中绘制一个简单的线图

    您的代码和建议的问题: >再次,您需要更改组件的preferredSize(这里是Graph JPanel),而不是大小 >不要设置JFrame的边界. >在添加组件之后并在调用se ...

  3. 一个简单的权限管理系统

    之前抽空写了一个简单的权限管理系统.就是包含用户管理.部门管理.菜单管理.权限管理等简单的一些常用功能.特此记录下,以便分享~~~ 这个系统编码之初是立足于对于大平台下的多个子系统的权限管理,就是将用 ...

  4. django权限系统实现步骤_Django权限机制的实现

    django-permission 本文涉及的技术,已应用于我基于django 1.8+ 开发的博客系统--MayBlog,欢迎交流. 1. Django权限机制概述 权限机制能够约束用户行为,控制页 ...

  5. 恢复系统设置或计算机无法点击进入,系统还原步骤_教您系统还原操作方法

    电脑有时出现一些问题时需要还原系统,有些用户知道电脑有还原系统的功能但是不知道具体的还原步骤,小编现在给大家简单说说详细的系统还原步骤. 现在的通信设备等非常的先进,很多的东西都可以在手机上完成,但是 ...

  6. 怎样用python搭建简单的系统_如何用Python搭建一个简单的推荐系统?

    推荐系统的相关知识我们已在前文中提到,在这篇文章中,我们会介绍如何用Python来搭建一个简单的推荐系统. 本文使用的数据集是MovieLens数据集,该数据集由明尼苏达大学的Grouplens研究小 ...

  7. 利用Quartz设计采集系统并实现系统双活机制_在SpringCloud中自己设计系统双活---SpringCloud工作笔记178

    因为项目仅仅是不停的抓数据,没有弄成分布式的,但依然需要系统双活来保证系统稳定. 这个时候,我的思路是:这个在另一篇博文中有些的详细思路(在Timer定时任务中_基于Redis自己实现一套双机互备_双 ...

  8. 外置存储权限在哪打开_中兴手机怎么打开读取外置存储权限

    在2.x的版本中,在manifest中配得sd卡获得写的权而在4.0开发的源码当中,由于有了内外置sd卡的区分,android.permission.WRITE_EXTERNAL_STORAGE的权限 ...

  9. 在oracle中如何复制用户的权限不够,linux 普通用户下 移动或复制一个zip文件权限不够怎么办...

    切换到root有root权:方法直接修改/etc/passwd的uid和gid,将用户ID和组ID都改成0.(恶心的方法,还不如直接用su切换到root执行呐)方法二:用sudo可以是普通用户暂时获得 ...

最新文章

  1. nltk_data数据下载
  2. Spark源码阅读01-SparkConf
  3. 计算机上能玩vr游戏吗,VR设备是什么? 听说可以用来玩电脑游戏的?
  4. centos7安装dhcp服务器并由客户端动态获取IP地址
  5. 使用AFNetworking请求新浪微博数据接口出错解决办法
  6. openMP学习笔记(一)
  7. HDMI、DVI和VGA接口互相转换问题
  8. tslib-1.4.tar.gz安装和配置
  9. 使用Expression实现数据的任意字段过滤(1)
  10. 生成可编辑的pdf(可java代码动态赋值)
  11. scrapy 爬虫之爬取CSDN博客(一)
  12. 销售计算机流程图,flowchart_请问在电脑WORD中怎样画流程图?
  13. 前端开发css样式基础篇
  14. windows+clion Process finished with exit code -1073741515 (0xC0000135)
  15. 2020-12-20|西瓜更新Cookies ttwid获取方法
  16. 美国大学计算机科学专业排名2019,2019年美国大学计算机专业排名
  17. ROS2机器人实验报告提示01➡入梦⬅
  18. 易基因 - 重磅!2021最新SCI影响因子发布,国内期刊TOP10出炉
  19. 计算机随机数游戏抽卡,游戏抽卡概率设计:10连抽保底的概率模型
  20. java—JDK和jre目录结构

热门文章

  1. emoji表情过滤处理
  2. Android优秀开源项目大全
  3. 使用etop查看系统中进程信息
  4. 分享一种中小企业的文件服务器方案
  5. linux培训课程第十三天:ppt以及笔记
  6. C# 参考之方法参数关键字:params、ref及out
  7. 一篇文章,带你见证编程语言的诞生!
  8. 调研了2000位CEO,67%的企业都在数字化转型,想做的无非这3点
  9. c/c++视频教程哪个比较好? 能学下去的?
  10. React 系列之 怎么学最快速有效