zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    ExtJS小技巧
    Oracle 表的行数、表占用空间大小,列的非空行数、列占用空间大小 查询
    NPM 私服
    IDEA 不编译java以外的文件
    SQL 引号中的问号在PrepareStatement 中不被看作是占位符
    Chrome 浏览器自动填表呈现淡黄色解决
    批量删除Maven 仓库未下载成功.lastupdate 的文件
    Oracle 11g 监听很慢,由于监听日志文件太大引起的问题(Windows 下)
    Hibernate 自动更新表出错 建表或添加列,提示标识符无效
    Hibernate 自动更新表出错 More than one table found in namespace
  • 原文地址:https://www.cnblogs.com/52-qq/p/8669768.html
Copyright © 2011-2022 走看看