权限组件之将登录用户权限写入到session中

1.登入admin,将销售员的权限改成只能查看订单列表

2.urls.py

3.views.py  这样的情况任何人都能访问

思考问题,怎么给页面加权限????

将登录用户权限写入到session中

4.将登入用户权限列表写入到session里面。   session = { "user_id":1, "permission_list":[‘/users/‘, ‘/orders/‘] }

5.访问用户列表、用户订单的时候,去session里面取值  (权限列表)

判断条件: 只要访问的url 在权限列表里面,则可以访问。

6.那么问题来了,如果url有正则(\d+),怎么判断呢???

# current_path = request.path_info  # /users/edit/3
# permission_list = request.session["permission_list"]  # [‘/users/‘,‘/orders/‘,‘/users/edit/(\d+)‘]# if current_path in permission_list:   # 无法判断了#     pass

正则匹配

7.match方法

匹配成功的返回值

8.users

orders  订单也一样的判断

代码:

from django.shortcuts import render,redirect,HttpResponse

# Create your views here.
from rbac.models import *

def login(request):
    if request.method=="GET":
        return render(request,"login.html")

    else:
        user=request.POST.get("user")
        pwd=request.POST.get("pwd")
        user=UserInfo.objects.filter(name=user,pwd=pwd).first()
        if user:
            # 验证成功之后做什么?
            request.session["user_id"]=user.pk

            # 当前登录用户的所有权限

            permission_info=user.roles.all().values("permissions__url","permissions__title").distinct()
            temp=[]
            for i in permission_info:
                temp.append(i["permissions__url"])
            request.session["permission_list"]=temp

            #  {"user_id":1,"permission_list":[‘/users/‘,‘/orders/‘]}
            return HttpResponse("登录成功!")
        else:
            return redirect("/login/")

def users(request):

    current_path = request.path_info  # /users/edit/3

    permission_list = request.session.get("permission_list")
    if not permission_list:
        return redirect("/login/")
    # /users/edit/3
    import re
    flag = False
    for permission_url in permission_list:
        ret = re.match(permission_url, current_path)
        if ret:
            flag = True
            break
    if not flag:
        return HttpResponse("没有权限")

    return HttpResponse("用户列表")

def orders(request):

    current_path = request.path_info  # /users/edit/3
    permission_list = request.session.get("permission_list")
    if not permission_list:
        return redirect("/login/")
    # /users/edit/3
    import re
    flag = False
    for permission_url in permission_list:
        ret = re.match(permission_url, current_path)
        if ret:
            flag = True
            break
    if not flag:
        return HttpResponse("没有权限")

    return HttpResponse("订单列表")

Views.py

中间件

1.问题:判断代码写到单独的一个文件中,然后中间件中引入。避免太多重复

2.应该继承什么呢?? 看源码

3.

4.

5.

6.

7.

代码:

from django.utils.deprecation import MiddlewareMixin

from django.shortcuts import  redirect,HttpResponse,render

class M1(MiddlewareMixin):
    def process_request(self,request):
        pass

        #/admin/login/?next=/admin/
        current_path = request.path_info

        valid_url_menu=["/login/","/reg/","/admin/.*"]
        import re
        for valid_url in valid_url_menu:
            ret=re.match(valid_url,current_path)
            if ret:
                return None

        permission_list = request.session.get("permission_list")
        if not permission_list:
            return redirect("/login/")
        # /users/edit/3
        import re
        flag = False
        for permission_url in permission_list:
            ret = re.match(permission_url, current_path)
            if ret:
                flag = True
                break
        if not flag:
            return HttpResponse("没有权限")

s.py

8.接下来访问login也没有权限。(加权限的url多,所有应该在中间件s.py文件中定义白订单)

9.

10.admin的路径会自动改变

直接跳转

11.白名单路径写死了,应该用正则。

原文地址:https://www.cnblogs.com/c-x-m/p/9026602.html

时间: 2024-08-11 05:49:27

权限组件之将登录用户权限写入到session中的相关文章

drf框架 8 系统权限类使用 用户中心信息自查 token刷新机制 认证组件项目使用:多方式登录 权限组件项目使用:vip用户权限 频率组件 异常组件项目使用

系统权限类使用 图书接口:游客只读,用户可增删改查权限使用 from rest_framework.permissions import IsAuthenticatedOrReadOnly class BookViewSet(ModelViewSet): # 游客只读,用户可增删改查 permission_classes = [IsAuthenticatedOrReadOnly] queryset = models.Book.objects.all() serializer_class = se

【数据库设计-2】权限设计-系统登录用户权限设计

需求分析---场景 假设需要为公司设计一个人员管理系统,并为各级领导及全体员工分配系统登录账号.有如下几个要求: 1. 权限等级不同:公司领导登录后可查看所有员工信息,部门领导登录后只可查看本部门员工的信息,员工登录后只可查看自己的信息: 2. 访问权限不同:如公司领导登录后,可查看员工薪水分布界面,而员工则不能看到: 3. 操作权限不同:如系统管理员可以在信息发布界面进行增删改查发布信息,而普通员工只可以在信息发布界面进行查看,不能修改.删除和新增. 功能分析 1. 登录一个系统,基本都需要用

权限设计-系统登录用户权限设计

需求分析-场景 假设需要为公司设计一个人员管理系统,并为各级领导及全体员工分配系统登录账号.有如下几个要求: 1. 权限等级不同:公司领导登录后可查看所有员工信息,部门领导登录后只可查看本部门员工的信息,员工登录后只可查看自己的信息: 2. 访问权限不同:如公司领导登录后,可查看员工薪水分布界面,而员工则不能看到: 3. 操作权限不同:如系统管理员可以在信息发布界面进行增删改查发布信息,而普通员工只可以在信息发布界面进行查看,不能修改.删除和新增. 功能分析 1. 登录一个系统,基本都需要用户输

[Flex] 组件Tree系列 —— 阻止用户点击选中Tree中任何节点

mxml: 1 <?xml version="1.0" encoding="utf-8"?> 2 <!--功能描述:阻止用户点击选中Tree中任何节点--> 3 <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 4 xmlns:s="library://ns.adobe.com/flex/spark" 5 xmlns:mx="

[Flex] 组件Tree系列 —— 阻止用户点击选中Tree中分支节点

mxml: 1 <?xml version="1.0" encoding="utf-8"?> 2 <!--功能描述:阻止用户点击选中Tree中分支节点--> 3 <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 4 xmlns:s="library://ns.adobe.com/flex/spark" 5 xmlns:mx="

移动端权限控制--设置每个登录用户的sessionId

前言: 在pc端,每个用户首次登录后,浏览器会返回一个sessionId,存放在浏览器的响应中. 当再次访问其他接口时,浏览器会自动将sessionId放在请求头中的Cookie中.后台会自动识别sessionId,判断是哪个用户发过来的请求. 但是在移动端,浏览器没有实现这个功能,所以我们需要自己手动设置请求的sessionId. 我们可以在登录接口的响应中获取sessionId,如下: //获取到sessionId String responseCooike = response.getFi

thinkphp5登录并保存session、根据不同用户权限跳转不同页面

本文讲述如何在thinkphp5中完成登录并保存session.然后根据不同的用户权限跳转相应页面功能的实现.我也在学习thinkphp源码的路上,记录一下并与大家分享.完成该步骤主要有以下三个步骤完成. 一.密码校验 这里view层提交过来的用户名和密码是不加密的,数据中的密码是经过md5加密的,所以首先对密码进行加密,然后跟数据库中的记录比对,如果一致则认为成功. 二.session保存 如果校验成功则将用户信息保存在session中. 三.根据不同权限跳转 有时候我们对于不同的用户展示的页

RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.2-&gt;WinForm版本新增新的用户权限设置界面

在实际应用中我们会发现,权限控制会经常变动,如:需要调整角色的分配,需要收回与授予某些角色.用户可访问的模块(菜单)与相应的操作权限.需要给某些角色添加与移除相应的用户等等,如果没有一个灵活可靠的配置管理工具将会使权限控制变得十分麻烦.用户授权管理模块就是为了方便用户.角色权限的集中统一管理而开发的模块.在用户授权管理模块,操作员可以添加或移动用户到指定的角色.可以分配或授予指定用户的模块(菜单)的访问权限.可以收回或分配指定用户的操作(功能)权限.可以对所有用户.角色.模块(菜单).操作(功能

RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.2-&gt; Web版本新增新的用户权限设置界面

在实际应用中我们会发现,权限控制会经常变动,如:需要调整角色的分配,需要收回与授予某些角色.用户可访问的模块(菜单)与相应的操作权限.需要给某些角色添加与移除相应的用户等等,如果没有一个灵活可靠的配置管理工具将会使权限控制变得十分麻烦.用户授权管理模块就是为了方便用户.角色权限的集中统一管理而开发的模块.在用户授权管理模块,操作员可以添加或移动用户到指定的角色.可以分配或授予指定用户的模块(菜单)的访问权限.可以收回或分配指定用户的操作(功能)权限.可以对所有用户.角色.模块(菜单).操作(功能