首页 > 其他分享 >drf-基于角色的访问控制

drf-基于角色的访问控制

时间:2023-05-30 20:44:38浏览次数:50  
标签:name 角色 访问控制 auth fa icon 权限 admin drf

目录

一 权限控制

ACL

# ACL(访问控制列表)的权限控制:(针对互联网用户的产品)
    用户表
    id    name      password
    1     zhangsan   123
    
    权限表
    id   user_id    权限
    1     1         评论权限
    2     1          发抖音权限

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

RBAC

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:用户和权限多对多中间表
    

二 控制权限

2.1 django中,如何做权限控制的

# 使用后台管理系统做权限控制


1.model中创建Book类
2.用户表使用的是auth中的user表
3.数据迁移
4.创建超级用户
5.admin中注册书籍表
    admin.site.register(Book)
6.访问后台管理

# 这样就可以登陆到admin后台进行操作了


是否是工作人员状态:选中后才能登录后台管理

2.2 我们开发中做权限控制

# python开发,公司内部项目多,使用基于角色的访问控制的权限,比较多

# python+django 开发出一套公司内部项目,要带rbac的权限控制
    -1 基于django的auth+admin 快速开发,有更多操作,但是没学
    -2 基于django的auth+admin+第三方美化 快速开发
        -国内的:simple-ui,xadmin(弃用了)
        -国外的

    -3 基于django+vue+自定制权限 
        -djagno-vue-admin :第三方开源

    -4 完全自己写

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

网址:https://simpleui.72wo.com/simpleui/

1. 安装

pip3 install django-simpleui

2. 配置文件配置,注册app

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

3. 菜单栏定制

4. 自定义菜单和页面

import time

SIMPLEUI_CONFIG = {
    'system_keep': False,
    'menu_display': ['我的地盘', '权限认证', '多级菜单测试', '动态菜单测试', '图书管理'],  # 开启排序和过滤功能, 不填此字段为默认排序和全部显示, 空列表[] 为全部不显示.
    'dynamic': True,  # 设置是否开启动态菜单, 默认为False. 如果开启, 则会在每次用户登陆时动态展示菜单内容
    'menus': [  # menu_display中添加了几个数据,就对应写几个字典
        {
            'name': '我的地盘',  # 跟上边的数据一致
            'icon': 'fas fa-code',
            'url': '/index/',  # url可以写外部地址,也可以写项目路由
            # 浏览器新标签中打开
            # '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/'
                },
            ]
        },
    ]
}

5. 自定义按钮

admin.py文件
# admin.site.register(Publish)
@admin.register(Book)  # 直接对表进行定制
class BookAdmin(admin.ModelAdmin):
    # 列表页面,展示的字段
    list_display = ('id', 'name', 'price')
    # 增加自定义按钮
    actions = ['custom_button']
    def custom_button(self, request, queryset):
        print(queryset)  # 之后就可以自己写代码,增加其他操作或逻辑
        print(request)
    # 显示的文本,与django admin一致
    custom_button.short_description = '测试按钮'
    # icon图标,参考element-ui icon与https://fontawesome.com
    custom_button.icon = 'fas fa-audio-description'

    # 指定element-ui的按钮类型,参考https://element.eleme.cn/#/zh-CN/component/button
    custom_button.type = 'info'
    # 给按钮追加自定义的颜色
    # custom_button.style = 'color:black;'

6. 切换图标

7. 首页显示的隐藏

# 其实它可以开发出任意各种功能

2.4 djagno-vue-admin

https://gitee.com/liqianglog/django-vue-admin

标签:name,角色,访问控制,auth,fa,icon,权限,admin,drf
From: https://www.cnblogs.com/zjyao/p/17444372.html

相关文章

  • drf-JWT认证
    目录一jwt介绍和原理1.1cookie,session,token发展历史1.2认证过程1.3JWT的构成1.3.1header1.3.2payload1.3.3signature二base64编码和解码2.1base64使用2.2base64的用途三jwt开发流程四drf-jwt快速使用五drf-jwt定制返回格式六自定义签发和认证6.1drf-jwt自定义用户......
  • drf-jwt
    jwt原理使用jwt认证和使用session认证的区别session是将用户信息存放在数据库中,在客户端存一个随机的字符串,下次用户提交的时候将字符串与数据库中存在的进行比较jwt是根据用户提交的信息,产生一个token,将token返回给客户端,下次用户提交的时候,将token进行解析三段式#这是一......
  • Elasticsearch专题精讲——API规范—— 基于 URL 的访问控制
    API规范——基于URL的访问控制https://www.elastic.co/guide/en/elasticsearch/reference/8.8/api-conventions.html#api-url-access-control Elasticsearch中的multi-search(多搜索)、multi-get(多获取)和bulk(批量请求)是在一个请求中执行多个操作的方法。如果使用基于URL......
  • 数据库简述权限和角色的概念以及它们的区别?
    1、含义权限是对资源的一种保护访问,用户要访问A资源前提是用户必须有A资源的访问权限。角色的概念:实事上我们不会直接把权限赋予给用户,而是通过角色来赋予给用户,因为用户拥有某一种权限是因为用户扮演着某一种角色。2、区别权限角色是系统功能权限设置的基础,相当于用户分组,所有用......
  • drf——jwt
    jwt原理使用jwt认证和使用session认证的区别三段式eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ#1.headerjwt的头部承载两部分信息:声明类型这里是jwt......
  • 2.4. 封装与访问控制
    封装(Encapsulation)是面向对象编程的一个核心概念,它意味着将数据(属性)和方法(操作数据的函数)捆绑在一起,形成一个类(Class)。封装的目的是将数据和操作数据的方法隐藏起来,以防止外部对数据的直接访问。这样,我们就可以通过定义公共接口(PublicInterface)来控制外部对类的访问,提高代码的可维......
  • jwt原理,jwt开发流程,drf-jwt快速使用,drf-jwt定制返回格式,drf-jwt自定义用户表签发,drf-j
    jwt原理:  JWT就是一段字符串,由三段信息构成的,将这三段信息文本用.链接一起就构成了Jwt字符串1headerjwt的头部承载两部分信息:声明类型,这里是jwt声明加密的算法通常直接使用HMACSHA256公司信息......
  • jwt原理开发,drf-jwt快速使用和自定义使用,jwt签发认证源码分析
    一眼弄懂cookieSeesiontoken区别彻底弄懂cookie,session和token区别1jwt原理1.1使用jwt认证和使用session认证的区别1.2三段式eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEf......
  • ABAP 用户角色导入
    *&---------------------------------------------------------------------**&ReportZ_USER_ROLES_IMPORT*&---------------------------------------------------------------------**&*&------------------------------------------------------......
  • DRF之通过GenericAPIView的视图子类实现数据的增删改查接口
    1、安装DRFpipinstalldjangorestframework2、将DRF注册到APP中INSTALLED_APPS=['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','djan......