首页 > 编程语言 >python项目结束后权限管理配置

python项目结束后权限管理配置

时间:2022-09-06 12:34:15浏览次数:66  
标签:name python 配置 list rbac models 权限 admin verbose

一、创建rbac的app

python manage.py startapp rbac
注入;settings.py的INSTALLED_APPS中

二、创建rbac表,在rbac的models.py中添加

from django.db import models
# 权限表
class Permission(models.Model):

    title = models.CharField(verbose_name='标题', max_length=32)
    url = models.CharField(verbose_name='含正则的URL', max_length=128)

    is_menu = models.BooleanField(verbose_name='是否可做菜单',default=False)
    icon = models.CharField(max_length=32,null=True,blank=True)
    def __str__(self):
        return self.title

# 角色
class Role(models.Model):

    title = models.CharField(verbose_name='角色名称', max_length=32)
    permissions = models.ManyToManyField(verbose_name='拥有的所有权限', to='Permission', blank=True)


    def __str__(self):
        return self.title

# 用户表
class UserInfo(models.Model):

    name = models.CharField(verbose_name='用户名', max_length=32)
    password = models.CharField(verbose_name='密码', max_length=200)
    email = models.CharField(verbose_name='邮箱', max_length=32)
    roles = models.ManyToManyField(verbose_name='拥有的所有角色', to='Role', blank=True)

    def __str__(self):
        return self.name

创建数据库结构   python.exe manage.py  makemigrations   && python.exe manage.py  migrate

三、创建权限检查表,在rbac下创建middleware文件,在该目录下创建rbac.py文件

from django.utils.deprecation import MiddlewareMixin
from xyglweb import settings
from django.shortcuts import redirect, render
import re

class RbacMiddleware(MiddlewareMixin):

    def process_request(self,request):
        # 1、获取当前请求的url
        current_url = request.path_info
        #1.5 添加白名单

        for reg in settings.VAILD_URL:
            if re.match(reg,current_url):
                return None
        #2、获取当前用户的session中的所有权限
        permission_list = request.session.get(settings.PERMISSION_SESSION_KEY)
        role_list  = request.session.get(settings.ROLE_SESSION_KEY)
        if not permission_list:
            return redirect('/portal/')

        #3、进行权限校验
        print(current_url)
        print(role_list,'RRRRRRRRRRRRRRR')
        # print(permission_list)
        flag = False
        for item in permission_list:
            reg = "^%s$" % item.get('permissions__url')
            if re.match(reg,current_url):
                flag = True
                break
        if not flag:
            return render(request,'error/403.html')
注入;settings.py的MIDDLEWARE中 “'rbac.middleware.rbac.RbacMiddleware',”

 四、在settings中配置变量

PERMISSION_SESSION_KEY = "permission_list"
MENU_SESSION_KEY = "menu_list"
ROLE_SESSION_KEY = "role_list"
#1.5 添加白名单
VAILD_URL = [
            '^/admin/*',
            '^/portal/$',
            '^/$',
            '/clean_cookie/',
            # '/ywworkportal/','/addywwork/','/upload/','/yunweiticx/','/addxgg1port/','/delgg1/','/article_detail/','/editblog/','/delblog/','/addxgg2port/','/delgg2/',
            # '/addxgg3port/','/delgg3/','/addxgg4port/','/delgg4/',
        ]

五、在rbac的admin.py中注册

from django.contrib import admin

# Register your models here.
from rbac import models

class PermissionAdmin(admin.ModelAdmin):
    list_display = ['title','url','is_menu','icon']
    # list_editable = ['url']
class RoleAdmin(admin.ModelAdmin):
    list_display = ['title']

class UserInfoAdmin(admin.ModelAdmin):
    list_display = ['name','email']

admin.site.register(models.Permission,PermissionAdmin)
admin.site.register(models.Role,RoleAdmin)
admin.site.register(models.UserInfo,UserInfoAdmin)

 

标签:name,python,配置,list,rbac,models,权限,admin,verbose
From: https://www.cnblogs.com/zhj5418/p/16661362.html

相关文章

  • Python 中的 sorted 和 sort的区别
    Python中的sorted和sort的区别#sort与sorted区别:#sorted()是内置函数.sorted可以对所有可迭代的对象进行排序操作,有返回值,返回列表;#sort是list上的方法,是对......
  • 【python】sort 排序
    sort排序fromoperatorimportitemgettera=[ {'name':'小张','create_time':'2020-10-1609:56'}, {'name':'小王','create_time':'2020-10-1609:57'}, {'name'......
  • k8s配置harbor密钥
    目录一、简介二、k8s解决方案三、参考一、简介1、Kubernetes在拉取私服(Harbor)镜像时,经常出现问题,导致ImagePullBackOff,通过desicribe查看pod发现没有pull权限所致。2......
  • 晓晓---python文件的读写模式的理解
    1.python读取文件模式的自我理解:'r'openforreading(default)----只读模式打开文件,不能写;'w'openforwriting,truncatingthefilefirst----只写模式......
  • Python-注解-类型注解
    类型注解的作用Python是动态语言,其显著特点是在声明变量时,你不需要显式声明它的类型。程序运行时会推断出变量age是int类型但是:如果你代码某些变量的类型有错,编辑器......
  • rh358 005 dhcp dhcp6 打印机 ansible配置dhcp和打印机
    部署dhcp服务器主机发送Discover报文目标为广播地址同一网段的dhcp收到报文后,dhcp响应一个offer报文offer报文:dhcp自己的ip地址。和客户端ip以及使用周期,和客户端ip网......
  • idea中application.yml文件配置git的https连接报cannot open git-upload-pack错误
    如下图 git连接方式为https方式,访问仓库内的某个文件时报cannotopengit-upload-pack错误 解决方法 在idea的设置中找到图中的选项选中即可......
  • swagger2 + spring security(携带token) 相关配置
    本文配置swagger2.9的基本、携带token相关配置引入依赖<!--swagger--><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</art......
  • 复习python基础
    ......
  • java调用kettle自定义kettle.properties配置文件路径
    java调用kettle自定义kettle.properties配置文件路径默认路径java调用kettle的jar包时,在初始化环境的时候,会在指定路径创建并加载kettle的kettle.properties文件,该文件的......