• 初识权限


    权限

    web网站权限
    
    什么是权限?
    
        一个含正则表达式的URl是一个权限
    
    方案1:
    
        用户表
           id   name
           1    alex
           2    egon
    
    
    
        权限表
           id   user_id          url               title
            1       1       /customer/add/        添加客户
            2       1       /customers/list/      查看客户
            2       1       /consult_records/     查看跟进记录
            2       1       /consult_records/add/ 添加跟进记录
            
            
    方案2(RBAC:role based access control):
    
        用户表
           id   name
           1    alex
           2    egon
                                                 user2role
                                            id   user_id    role_id
                                             1       1         3
                                             2       2         3
        角色表  
            id  title
             1   CEO
             2   销售总监
             3   销售         
                                                  role2permission
                                            id    role_id    permission_id
                                             1        3            1
                                             2        3            2
                                             3        3            3
                                             4        3            4
        权限表
           id            url               title
            1          /customer/add/        添加客户
            2          /customers/list/      查看客户
            2          /consult_records/     查看跟进记录
            2          /consult_records/add/ 添加跟进记录
    View Code

    model

    from django.db import models
    
    # Create your models here.
    
    class User(models.Model):
        name = models.CharField(max_length=32)
        pwd = models.CharField(max_length=32)
        roles = models.ManyToManyField("Role")
    
        def __str__(self):
            return self.name
    
    
    class Role(models.Model):
        title = models.CharField(max_length=32)
        permission = models.ManyToManyField("Permission")
    
        def __str__(self):
            return self.title
    View Code

    admin

    from django.contrib import admin
    
    # Register your models here.
    
    from app01.models import User,Role,Permission
    
    admin.site.register(User)
    
    class RoleConfig(admin.ModelAdmin):
        list_display = ["title"]
    
    admin.site.register(Role,RoleConfig)
    
    class PermissionConfig(admin.ModelAdmin):
        list_display = ["pk","title","url"]
        ordering = ["pk"]
    
    admin.site.register(Permission,PermissionConfig)
    View Code

    view

    def login(request):
    
        if request.method == "POST":
            user = request.POST.get("user")
            pwd = request.POST.get("pwd")
            user_obj = User.objects.filter(name=user,pwd=pwd).first()
            if user_obj:
                request.session["user_id"] = user_obj.pk
                permissions = Role.objects.filter(user=user_obj).values("permission__url").distinct()
                permissions_list = []
                for item in permissions:
                    permissions_list.append(item["permission__url"])
    
                request.session["permissions_list"] = permissions_list
    
                return HttpResponse("登录成功!")
    
        return render(request,"login.html")
    View Code

    middleware

    from django.utils.deprecation import MiddlewareMixin
    import re
    from django.shortcuts import redirect,HttpResponse
    
    class PermissionMiddleWare(MiddlewareMixin):
    
        def process_request(self,request):
            # 设置白名单放行
            for reg in ["/login/","/admin/*"]:
                ret = re.search(reg,request.path)
                if ret:
                    return None
    
            # 检验是否登录
            if not request.session.get("user_id"):
                return redirect("/login/")
    
            # 权限
            permissions_list = request.session.get("permissions_list")
            for reg in permissions_list:
                reg = "^%s$" % reg
                ret = re.search(reg,request.path)
                if ret:
                    return None
            return HttpResponse("没有权限!")
    View Code
  • 相关阅读:
    【原】 POJ 1012 Joseph 约瑟夫 解题报告
    【原】 POJ 1001 Exponentiation 大整数乘法 解题报告
    POJ——1517
    毕业了,校园里走走看看——华中科技大学
    毕业答辩后
    CV编程常用的获取鼠标圈定区域的方法
    送走了GB
    POJ——2546
    奥巴马在YY21#524
    POJ——3517
  • 原文地址:https://www.cnblogs.com/qq849784670/p/9955004.html
Copyright © 2020-2023  润新知