先在项目中创建  app rbac的models.py

from django.db import models

class Permission(models.Model):
"""
权限表
"""
url = models.CharField('权限', max_length=32)
title = models.CharField('标题', max_length=32) def __str__(self):
return self.title class Role(models.Model):
"""
角色表
"""
name = models.CharField('角色名称', max_length=32)
permissions = models.ManyToManyField('Permission', verbose_name='角色所拥有的权限', blank=True) def __str__(self):
return self.name class User(models.Model):
"""
用户表
"""
name = models.CharField('用户名', max_length=32)
pwd = models.CharField('密码', max_length=32)
roles = models.ManyToManyField('Role', verbose_name='用户所拥有的角色', blank=True)
def __str__(self):
return self.name

先在web urls.py中添加路由

url(r'^admin/', admin.site.urls),
url(r'^login/$', auth.login,name='login'),
url(r'^index/$', auth.index,name='index'),

web  app 中 views auth.py

from django.shortcuts import render, redirect, HttpResponse, reverse
from rbac import models def index(request):
return render(request, 'index.html') def login(request):
if request.method == 'POST':
# 获取用户名和密码
user = request.POST.get('user')
pwd = request.POST.get('pwd')
# 去数剧库进行筛选
obj = models.User.objects.filter(name=user, pwd=pwd).first()
if not obj:
return render(request, 'login.html')
permission_query = obj.roles.filter(permissions__url__isnull=False).values('permissions__url',
'permissions__title').distinct()
print('',permission_query) # <QuerySet [{'permissions__url': '/index/', 'permissions__title': '首页'}]>
request.session['permission'] = list(permission_query)
request.session['is_login'] = True
return redirect(reverse('index'))
return render(request, 'login.html')

在rbac app中创建过滤器

middlewares/rbac.py

from django.utils.deprecation import MiddlewareMixin
from django.shortcuts import HttpResponse, redirect, reverse
from django.conf import settings
import re
class RbacMiddleWare(MiddlewareMixin):
def process_request(self, request):
# 获取当前访问的页面
url = request.path_info # index
# 白名单
for i in settings.WHITE_LIST:
if re.match(i, url):
return
# 获取登录状态
is_login = request.session.get('is_login')
# 没有登录跳转到登录页面
if not is_login:
return redirect(reverse('login')) # 免认证
for i in settings.NO_PERMISSION_LIST:
if re.match(i, url):
return
# 获取当前用户的权限
permission_list = request.session['permission']
print(permission_list)
# 权限的校验
for i in permission_list:
if re.match('^{}$'.format(i['permissions__url']), url):
return
# 没匹配成功 没有权限
return HttpResponse('没有访问的权限')

其中的re 是 引用settings.py中的变量

# 白名单
WHITE_LIST = [
r'^/login/$',
r'^/reg/$',
r'^/admin/.*',
]
# 免认证的地址 需要登录 不行权限校验
NO_PERMISSION_LIST = [
'/index/'
]

附上admin的py

from django.contrib import admin
from rbac import models # Register your models here. class PermissionAdmin(admin.ModelAdmin):
list_display = ['url', 'title']
list_editable = ['title']
admin.site.register(models.Permission, PermissionAdmin)
admin.site.register(models.Role)
admin.site.register(models.User)

crm 权限设计的更多相关文章

  1. 百万年薪python之路 -- RBAC角色权限设计

    RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联.简单地说,一个用户拥有若干角色,每一个角色拥有若干权限.这样,就构造成"用 ...

  2. AppBox升级进行时 - 扁平化的权限设计

    AppBox 是基于 FineUI 的通用权限管理框架,包括用户管理.职称管理.部门管理.角色管理.角色权限管理等模块. AppBox v2.0中的权限实现 AppBox v2.0中权限管理中涉及三个 ...

  3. 一个基于RBAC0的通用权限设计清单

    注:RBAC0与RBAC1不同在于权限继承.关于RBAC1的权限设计,敬请关注作者后续CSDN博客.1,用户表 保存系统用户信息,如张三.李四,字段可以有id.name.fullname.email. ...

  4. ASP.NET MVC +EasyUI 权限设计(二)环境搭建

    请注明转载地址:http://www.cnblogs.com/arhat 今天突然发现博客园出问题了,老魏使用了PC,手机,平板都访问博客园了,都是不能正常的访问,原因是不能加载CSS,也就是不能访问 ...

  5. ASP.NET MVC +EasyUI 权限设计(一)开篇

    在前一段时间中,老魏的确非常的忙碌,Blog基本上没有更新了,非常的抱歉,那么在后面的时间中,老魏会尽量的抽时间来写的,可能时间上就不太富裕了.今天开始呢,老魏会和大家分享一下关于权限设计的有关文章, ...

  6. WisDom.Net 框架设计(五) 权限设计

    WisDom.Net --权限设计 1.需求分析     基本在所有的管理系统中都离不开权限管理.可以这么说,权限管理是管理系统的核心所在. 权限管理说白一些就是每个人能够做什么,不能够做什么.可以说 ...

  7. JAVA 数据权限设计

    数据权限设计 前言 在各种系统中.要保证数据对象的安全性以及易操作性,使企业的各业务部门.职能部门可以方便并且高效的协同工作,那么一个好的数据权限管理设计就成为一个关键的问题.尽管企业中各个单元的工作 ...

  8. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(13)-权限设计

    原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(13)-权限设计 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框架搭建    (2):数据 ...

  9. 权限设计实现(MVC4+Bootstrap+ PetaPoco+Spring.Net)

    权限设计实现(MVC4+Bootstrap+ PetaPoco+Spring.Net) 一.前言 至毕业后一直在做企业Web开发,做过的项目也有不少,每个项目的框架设计都不是一样,但是每个项目的权限模 ...

随机推荐

  1. 在windows下搭建汇编编程环境

    汇编语言程序搭建masm+debug 下载链接 dosbox:链接:https://pan.baidu.com/s/1TgkfU-d5w6Nz9TOYro1pYw 密码:mp83 masm:链接:ht ...

  2. 三机互ping(自己总结)

    主机与虚拟机互ping设置: 点击VMware下的[编辑]--[虚拟网络编辑器]设置如下:         屏幕剪辑的捕获时间: 2016/5/21 13:10         屏幕剪辑的捕获时间: ...

  3. Python基础——3特性

    特性 切片 L=[0,1,2,3,4,5,6,7,8,9,10] L[:3]=[0,1,2] L[-2:]=[9,10] L[1:3]=[1,2] L[::3]=[0,3,6,9] L[:5:2]=[ ...

  4. Django--session(登录用)

    一.session的原理图 二.Django中session对象的设置/读取/删除及其他方法 三. Django--配置 settings.py中与session有关的参数 一.session的原理图 ...

  5. vs 2015安装包

    Visual Studio 2015 下载含(更新3)及密钥 Visual Studio 2015 是一个丰富的集成开发环境,可用于创建出色的 Windows.Android 和 iOS 应用程序以及 ...

  6. Loj #2494. 「AHOI / HNOI2018」寻宝游戏

    Loj #2494. 「AHOI / HNOI2018」寻宝游戏 题目描述 某大学每年都会有一次 Mystery Hunt 的活动,玩家需要根据设置的线索解谜,找到宝藏的位置,前一年获胜的队伍可以获得 ...

  7. SQL 增删改语句

    阅读目录 一:插入数据 二:更新数据 三:删除数据 回到顶部 一:插入数据 把数据插入表中的最简单方法是使用基本的 INSERT 语法.它的要求是需要我们指定表名和插入到新行中的值. 1.1 插入完整 ...

  8. 终于有人把“TCC分布式事务”实现原理讲明白了!

    之前网上看到很多写分布式事务的文章,不过大多都是将分布式事务各种技术方案简单介绍一下.很多朋友看了还是不知道分布式事务到底怎么回事,在项目里到底如何使用. 所以这篇文章,就用大白话+手工绘图,并结合一 ...

  9. 跳出语句break 和continue

    关键字break 常见的两种用法 在switch语句当中,一旦执行,整个switch语句立刻结束 在循环语句当中,一旦执行,整个循环语句立刻结束.跳出循环 代码举例: public class Dem ...

  10. 控制结构(2): 卫语句(guard clause)

    // 上一篇:分枝/叶子(branch/leaf) // 下一篇:状态机(state machine) 基于语言提供的基本控制结构,更好地组织和表达程序,需要良好的控制结构. 典型代码: 同步版本 f ...