权限控制(ACL、RBAC)、admin后台管理
一、ACL 访问控制列表
1、ACL(访问控制列表)的权限控制:(针对互联网用户的产品)
1 2 3 4 5 6 7 8 9 10 | 用户表 id name password 1 zhangsan 123 权限表 id user_id 权限 1 1 评论权限 2 1 发抖音权限 张三:[评论权限, 发抖音权限] |
二、基于角色的访问控制
RBAC(Role-Based Access Control)基于角色的访问控制:(针对于公司内部项目)
权限与角色相关联,用户通过成为适当角色的成员而得到这些角色的权限。这就极大地简化了权限的管理。这样管理都是层级相互依赖的,权限赋予给角色,而把角色又赋予用户,这样的权限设计很清楚,管理起来很方便。
1、django中的auth rbac应用
1 2 3 4 5 6 7 8 9 10 11 | # django的auth其实就实现了基于角色的访问控制---> 通过表控制的 - auth_user :用户表,存用户信息 - auth_group:组,角色,存放角色信息 - auth_permission:权限,存放权限信息 # 分析:一个组(角色)中,有多个用户,一个用户,属于多种角色----> 多对多 - auth_user_groups:用户和组的多对多中间表 # 分析:一个组,可能有多个权限,一个权限,也可能属于多个组---> 多对多 - auth_group_permissions:组和权限的多对多中间件 # django,多了张表:auth_user_user_permissions # 分析:一个用户,可以有多个权限,一个权限,可以分配个多个用户---> 多对多 - auth_user_user_permissions:用户和权限多对多中间表 |
2、补充
ABAC 基于属性的访问控制(Attribute-Based Access Control)
1 2 3 4 5 6 7 8 9 10 11 12 | ABAC(Attribute - Based Access Control,基于属性的访问控制),又称为PBAC(Policy - Based Access Control,基于策略的访问控制),CBAC(Claims - Based Access Control,基于声明的访问控制)。 传统的ACL、RBAC的架构是{subject,action, object }, 而ABAC的架构是{subject,action, object ,contextual}且为他们添加了parameter(参数)。 subject属性:比如用户的年龄、部门、角色、威望、积分等主题属性。 action属性:比如查看、读取、编辑、删除等行为属性。 object 属性:比如银行账户、文章、评论等对象或资源属性。 contextual属性:比如时段、IP位置、天气等环境属性 |
三、django中权限控制
1、
1 2 3 4 5 6 7 8 9 10 | # 公司内部,做公司内的项目需要使用这套权限控制 <br> # 方案一:使用django-admin写 # 有的公司,不怎么写前端,直接使用django的admin,快速写出一套具有权限管理的系统 # django admin的界面不好看:第三方美化--》simpleui ## 方案二:自己写,前端使用vue,后端使用django,做公司内部的项目 - 第三方开源的权限控制 项目 - python界:django - vue - admin - java界:若依 - go界:gin - vue - admin |
2、安装
1 2 3 4 5 6 | pip3 install django - simpleui INSTALLED_APPS = [ 'simpleui' , # 放到最上面 ... ] |
四、admin 后台管理model
1、注册
admin.site.register()
1 2 3 4 5 6 7 8 9 10 11 | from django.contrib import admin # Register your models here. from .models import User, Book from .models import AuthUser from django.contrib.auth.models import Permission admin.site.register(User) admin.site.register(Book) admin.site.register(AuthUser) admin.site.register(Permission) |
2、model
verbose_name_plural 字段能够修改表名显示
1 2 3 4 5 6 7 8 9 10 11 | class User(models.Model): username = models.CharField(max_length = 32 ) password = models.CharField(max_length = 32 ) email = models.EmailField(max_length = 12 , null = True ) gender = models.IntegerField(choices = (( 1 , '男' ), ( 2 , '女' ), ( 0 , '未知' )), null = True ) def __str__( self ): return self .username class Meta: verbose_name_plural = '自定义用户表' |