• RBAC-基于角色的访问控制


    RBAC-基于角色的访问控制

    什么是RBAC

    概念#

    RBAC 是基于角色的访问控制(Role-Based Access Control )在 RBAC 中,权限与角色相关联,用户通过成为适当角色的成员而得到这些角色的权限。这就极大地简化了权限的管理。这样管理都是层级相互依赖的,权限赋予给角色,而把角色又赋予用户,这样的权限设计很清楚,管理起来很方便。

    前面我们说到三大认证,比如权限,普通用户和管理员能够操作的接口就不一样,比如我们常见的视频软件,不开会员能看的视频寥寥无几,这就是权限的应用,但是这站在公司的角度是对外的权限,比如后台管理对公司内使用,公司内部的权限该如何分配?就用到了RBAC

    对外权限针对用户:普通注册用户,会员,超级会员····

    对内权限公司内部:使用RBAC的权限控制

    比如公司内部有开发部、财政部、市场部、人事部、运营部、总裁办···
    这写部门的权限是不同的,比如人事部有招人的权力,开发部有查看修改提交代码的权力···
    
    所以通过将权限和角色(部门)绑定,而角色又赋予用户,所以该部门有多大的权力,部门下的员工就有什么样的权力···
    

    总体而言,RBAC针对公司内部项目,后台管理开发居多

    Django的内置RBAC(六表)

    图解#

    权限三表

    image

    权限六表

    image


    image

    表关系#

    django的admin自带rbac权限管理(表设计完成权限管理),6张表

    用户表、组表(角色、部门)、权限表 ---> 三张

    用户和组多对多关系,存在中间表

    用户和权限多对多关系,存在中间表

    组和权限多对多关系,存在中间表 -----> 三张

    image

    实操

    models.py

    from django.db import models
    
    
    
    class Book(models.Model):
        name = models.CharField(max_length=32)
        price = models.DecimalField(max_digits=5, decimal_places=2)
        author = models.CharField(max_length=32)
    
        # 对象描述,显示书名
        def __str__(self):
            return self.name
    
        # 表名中文解释
        class Meta:
            '''
            verbose_name 顾名思义 起一个复杂点的名称,一般用来作中文解释
    
            verbose_name_plural 顾名思义是一个复数名称,因中文没有复数
            但django有时又会将用户的驼峰命名拆成单个词,给最后的词加复数,和用户的本义不符,
            因些加了这样一个选项来处理尴尬 比如 Blog Articals 或是 分类管理s
            '''
            # verbose_name = '图书表'
            verbose_name_plural = '图书表'
    

    admin

    from django.contrib import admin
    
    from .models import Book
    
    admin.site.register(Book)
    

    登录admin操作

    image


    image

    普通用户只能查看#

    image

    添加到组里,增加修改权限#

    image

    image


    ![image](https://img2022.cnblogs.com/blog/2608072/202204/2608072-20220407225423670-1053333751.png)

    admin二次开发

    初始样式

    image

    admin.py

    from django.contrib import admin
    
    from .models import Book
    
    
    # Register your models here.
    
    class BookAdmin(admin.ModelAdmin):
        # 设置列表可显示的字段
        list_display = ('name', 'price', 'author')
        # 设置过滤选项
        list_filter = ('name', 'price')
    
    
    admin.site.register(Book, BookAdmin)
    
    

    二次开发后的样式

    image

  • 相关阅读:
    探讨安科瑞低压备自投装置AM5-DB的应用-安科瑞 蒋静
    如何在前端项目中管理依赖关系?
    store下的getter.js什么作用
    DVWA 反射型XSS XSS(Reflected)题解
    [保姆级教程] 如何在 Linux Kernel (V5.17.7) 中添加一个系统调用(System call)
    malloc如何分配内存
    力扣每日一题47:全排列 ||
    【面试:并发篇30:多线程:happen-before】
    c++ 函数指针
    【微信小程序】页面tab栏与页面内容联动
  • 原文地址:https://www.cnblogs.com/48xz/p/16114774.html