Django之权限控制

一、简介

1.ACL

访问控制列表的权限控制:针对互联网用户的产品

用户表
    id    name      password
    1     zhangsan   123
    
    权限表
    id   user_id    权限
    1     1         评论权限
    2     1          发抖音权限

张三:[评论权限,发抖音权限]

2.RBAC(Role-Based Access Control)

基于角色的访问控制:针对于公司内部项目

权限与角色相关联,用户通过成为适当角色的成员而得到这些角色的权限。这就极大地简化了权限的管理。这样管理都是层级相互依赖的,权限赋予给角色,而把角色又赋予用户,这样的权限设计很清楚,管理起来很方便

django的auth其实就实现了基于角色的访问控制---》通过表控制的

-auth_user :用户表,存用户信息
-auth_group:组,角色,存放角色信息
-auth_permission:权限,存放权限信息

分析:一个组(角色)中,有多个用户,一个用户,属于多种角色----》多对多

-auth_user_groups:用户和组的多对多中间表

分析:一个组,可能有多个权限,一个权限,也可能属于多个组---》多对多

-auth_group_permissions:组和权限的多对多中间件

django,多了张表:auth_user_user_permissions

分析:一个用户,可以有多个权限,一个权限,可以分配个多个用户---》多对多
-auth_user_user_permissions:用户和权限多对多中间表

二、实操

models:

from django.db import models
from django.contrib.auth.models import AbstractUser


# Create your models here.
class User(AbstractUser):
    phone = models.IntegerField(null=True, blank=True)
    email = models.CharField(max_length=32)

    def __str__(self):
        return self.username


class Book(models.Model):
    name = models.CharField(max_length=32)

    def __str__(self):
        return self.name


class Publish(models.Model):
    title = models.CharField(max_length=32)
    price = models.CharField(max_length=64)

admin.py:

from django.contrib import admin
from .models import User, Book, Publish

# Register your models here.

admin.site.register(User)
admin.site.register(Publish)

基于django的auth+admin+第三方美化 快速开发

1 安装

pip3 install django-simpleui

2 配置文件配置,注册app

INSTALLED_APPS = [
      'simpleui',
      ...
  ]

3 菜单栏定制

SIMPLEUI_CONFIG = {
    'system_keep': False,
    'menu_display': ['我的地盘', '权限认证', '多级菜单测试', '动态菜单测试', '图书管理'],  # 开启排序和过滤功能, 不填此字段为默认排序和全部显示, 空列表[] 为全部不显示.
    'dynamic': True,  # 设置是否开启动态菜单, 默认为False. 如果开启, 则会在每次用户登陆时动态展示菜单内容
    'menus': [
        {
            'name': '我的地盘',
            'icon': 'fas fa-code',
            'url': '/index/',
            # 浏览器新标签中打开
            # 'newTab': True,
        },
        {
            'app': 'auth',
            'name': '权限认证',
            'icon': 'fas fa-user-shield',
            'models': [{
                'name': '用户',
                'icon': 'fa fa-user',
                'url': 'auth/user/'
            }]
        },
        {
            # 自2021.02.01+ 支持多级菜单,models 为子菜单名
            'name': '多级菜单测试',
            'icon': 'fa fa-file',
            # 二级菜单
            'models': [
                {
                    'name': 'Baidu',
                    'icon': 'far fa-surprise',
                    # 第三级菜单 ,
                    'models': [
                        {
                            'name': '爱奇艺',
                            'url': 'https://www.iqiyi.com/dianshiju/'
                            # 第四级就不支持了,element只支持了3级
                        },
                        {
                            'name': '百度问答',
                            'icon': 'far fa-surprise',
                            'url': 'https://zhidao.baidu.com/'
                        }
                    ]
                },
                {
                    'name': '内网穿透',
                    'url': 'https://www.wezoz.com',
                    'icon': 'fab fa-github'
                }]
        },
        {
            'name': '动态菜单测试',
            'icon': 'fa fa-desktop',
            'models': [{
                'name': time.time(),
                'url': 'http://baidu.com',
                'icon': 'far fa-surprise'
            }]
        },
        {
            'app': 'app01',
            'name': '图书管理',
            'icon': 'fas fa-user-shield',
            'models': [
                {
                    'name': '书本管理',
                    'icon': 'fa fa-user',
                    'url': 'app01/book/'
                },
                {
                    'name': '出版社管理',
                    'icon': 'fa fa-user',
                    'url': 'app01/publish/'
                },
            ]
        },
    ]
}

此外还有

djagno-vue-admin可以帮助我们快速开发出好看的后台

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值