权限系统实现方式:

  1、目标就是实现一个权限的组件,以后再写任何系统的时候可以直接进行使用;

  2、用户登录成功后,将此用户的权限信息存放在session,用户再访问其他视图时,将访问的url和session中权限url进行匹配;

  3、考虑每一个视图函数在被访问前都需要进行用户的权限验证,所以步骤2中的权限匹配放在中间件process_request函数中

ps:五种中间件介绍

- process_request 
- prccess_view
- process_exception
- process_response 
- process_template....

  django中,中间件中的主要四个方法的执行顺序如所写,从上到下。按照settings中配置的中间件的顺序,从上到下执行process_request方法,此方法可有可无返回值,若有返回值,则按中间件中五种方法的执行顺序,原路返回,后面的中间件不再执行;然后按照中间件的顺序,从上到下执行prccess_view方法;再按照配置中间件的顺序从下到上执行process_exception方法,若有异常则抛出异常;最后按照中间件的顺序从下往上逐个执行process_response方法,此方法一定会有返回值。

一、表结构的设计

from django.db import models

# Create your models here.
class UserInfo(models.Model):
    '''
    用户信息表:与角色表建立多对关系
    '''
    name=models.CharField(max_length=32,verbose_name="用户名")
    pswd=models.CharField(max_length=64)
    email=models.CharField(max_length=64)
    roles=models.ManyToManyField(to="Role")

    def __str__(self):
        return self.name

class Role(models.Model):
    '''
    角色表:与权限表创建多对多关系,此表主要是方便给同一类人批量增加权限
    '''
    name=models.CharField(max_length=32,verbose_name="角色名称")
    permissions=models.ManyToManyField(to="Permission")
    def __str__(self):
        return self.name

class Menu(models.Model):
    '''
    菜单表
    '''
    title=models.CharField(max_length=32)

    def __str__(self):
        return self.title
class PermissionGroup(models.Model):
    '''
    权限分组表:与菜单表建立多对一关系,主要解决可以作为菜单显示的权限列表太多情况,通过菜单
    表,可以将权限菜单作为二级菜单存在菜单下面
    '''
    caption=models.CharField(max_length=16)
    menu=models.ForeignKey(to="Menu",default=1)
    def __str__(self):
        return self.caption
class Permission(models.Model):
    '''
    权限表:与权限分组表建立多对一关系,将同一类权限归为一组,方便粒度到按钮级别的权限实现
            通过parent字段建立自关联,主要用于自动生成菜单时候判断哪些可以作为菜单项显示的
            -------(如编辑和删除权限显然不可以作为菜单显示)
    '''
    title=models.CharField(max_length=32,verbose_name="权限名称")
    url=models.CharField(max_length=128)
    code=models.CharField(max_length=16,default="list")
    group=models.ForeignKey(to="PermissionGroup",default=1)
    parent=models.ForeignKey(to="Permission",null=True,related_name="permissions")

    def __str__(self):
        return self.title
表结构设计

相关文章:

  • 2022-02-22
  • 2021-12-01
  • 2021-06-04
  • 2021-09-17
  • 2021-09-17
  • 2022-12-23
  • 2021-06-04
  • 2021-07-03
猜你喜欢
  • 2021-12-02
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-10-02
  • 2018-04-02
相关资源
相似解决方案