一、简介
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/'
},
]
},
]
}
此外还有