权限控制(ACL、RBAC)、admin后台管理

一、ACL 访问控制列表

1、ACL(访问控制列表)的权限控制:(针对互联网用户的产品)

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

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

二、基于角色的访问控制

RBAC(Role-Based Access Control)基于角色的访问控制:(针对于公司内部项目)

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

1、django中的auth rbac应用

# 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)

 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、simpleui

django admin管理界面的美化: simpleui

# 公司内部,做公司内的项目需要使用这套权限控制

# 方案一:使用django-admin写 # 有的公司,不怎么写前端,直接使用django的admin,快速写出一套具有权限管理的系统 # django admin的界面不好看:第三方美化--》simpleui ## 方案二:自己写,前端使用vue,后端使用django,做公司内部的项目 -第三方开源的权限控制 项目 -python界:django-vue-admin -java界:若依 -go界:gin-vue-admin

2、安装

pip3 install django-simpleui

INSTALLED_APPS = [
  'simpleui',  # 放到最上面
  ...
]

四、admin 后台管理model

1、注册

admin.site.register()

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  字段能够修改表名显示

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 = '自定义用户表'

  

  

 

posted @ 2023-09-12 17:04  凡人半睁眼  阅读(199)  评论(0编辑  收藏  举报