• Django-权限信息初始化


    数据库

    from django.db import models
    
    class Menu(models.Model):
        """
        菜单组:
        """
        title = models.CharField(max_length=32)
    
        def __str__(self):
            return self.title
    
    class Group(models.Model):
        """
        权限组
        """
        caption = models.CharField(verbose_name='组名称',max_length=16)
        menu = models.ForeignKey(verbose_name='所属菜单',to='Menu',default=1)            #多个组需要属于一个菜单
    
        def __str__(self):
            return self.caption
    
    class Permission(models.Model):
        """
        权限表
        """
        title = models.CharField(verbose_name='标题',max_length=32)
        url = models.CharField(verbose_name="含正则URL",max_length=64)
    
        menu_gp = models.ForeignKey(verbose_name='组内菜单',to='Permission',null=True,blank=True,related_name='x1')    #多种权限属于一个组
    
        code = models.CharField(verbose_name="代码",max_length=16)
        group = models.ForeignKey(verbose_name='所属组',to="Group")
    
        class Meta:
            verbose_name_plural = "权限表"
    
        def __str__(self):
            return self.title
    
    class User(models.Model):
        """
        用户表
        """
        username = models.CharField(verbose_name='用户名',max_length=32)
        password = models.CharField(verbose_name='密码',max_length=64)
        email = models.EmailField(verbose_name='邮箱',max_length=32)
        roles = models.ManyToManyField(verbose_name='具有的所有角色',to="Role",blank=True) #一个用户可以有多种权限,一种权限可是是多个用户所共有
    
        class Meta:
            verbose_name_plural = "用户表"
    
        def __str__(self):
            return self.username
    
    class Role(models.Model):
        """
        角色表
        """
        title = models.CharField(max_length=32)
        permissions = models.ManyToManyField(verbose_name='具有的所有权限',to='Permission',blank=True)      #一种权限可以对应多种角色,一个角色可以对应多个权限
        class Meta:
            verbose_name_plural = "角色表"
    
        def __str__(self):
            return self.title

    权限信息初始化

    from django.conf import settings
    
    
    def init_permission(user,request):
        """
        初始化权限信息,获取权限信息并放置到session中。
        :param user:
        :param request:
        :return:
        """
        permission_list = user.roles.values('permissions__id',
                                            'permissions__title',              # 用户列表
                                            'permissions__url',
                                            'permissions__code',
                                            'permissions__menu_gp_id',         # 组内菜单ID,Null表示是菜单
                                            'permissions__group_id',
                                            'permissions__group__menu_id',     # 菜单ID
                                            'permissions__group__menu__title',#  菜单名称
                                            ).distinct()
    
        # 菜单相关(以后再匹配)
        sub_permission_list = []
        for item in permission_list:
            tpl = {
                'id':item['permissions__id'],
                'title':item['permissions__title'],
                'url':item['permissions__url'],
                'menu_gp_id':item['permissions__menu_gp_id'],
                'menu_id':item['permissions__group__menu_id'],
                'menu_title':item['permissions__group__menu__title'],
            }
            sub_permission_list.append(tpl)
        request.session[settings.PERMISSION_MENU_KEY] = sub_permission_list
    
        # 权限相关
        result = {}
        for item in  permission_list:
            group_id = item['permissions__group_id']
            code = item['permissions__code']
            url = item['permissions__url']
            if group_id in result:
                result[group_id]['codes'].append(code)
                result[group_id]['urls'].append(url)
            else:
                result[group_id] = {
                    'codes':[code,],
                    'urls':[url,]
                }
        # 权限url
        request.session[settings.PERMISSION_URL_DICT_KEY] = result
  • 相关阅读:
    Git远程操作详解
    Markdown介绍
    Git & GitHub 学习
    小甲鱼Python笔记(类)
    小甲鱼Python笔记(下)
    小甲鱼Python笔记(上)
    compare.go
    compact_op.go
    cluster.go
    client.go
  • 原文地址:https://www.cnblogs.com/52-qq/p/8669768.html
Copyright © 2020-2023  润新知