zoukankan      html  css  js  c++  java
  • 初识权限

    权限

    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
  • 相关阅读:
    插入排序-Java
    选择排序-java
    逻辑回归----梯度上升
    logistic回归----- 随机梯度下降法
    JAVA实现聚类指标的计算Purity、NMI、RI、Precision、Recall、F值。
    Python 条形图绘制
    java中接口的注意事项
    算法-双向队列
    算法-manacher-最长回文子串-1
    算法-kmp-1
  • 原文地址:https://www.cnblogs.com/qq849784670/p/9955004.html
Copyright © 2011-2022 走看看