首页 > 其他分享 >权限控制

权限控制

时间:2023-05-30 20:23:58浏览次数:32  
标签:控制 name auth django fa 权限 icon

目录

权限控制

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

用户表
id    name      password
1     zhangsan   123

权限表
id   user_id    权限
1     1         评论权限
2     1          发抖音权限

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

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

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

image
由于是超级管理员账号,所以现在可以增删查改
image

image
创建两个组
image

image
创建一个普通用户只能有查看图书权限,给他分组
image
image

注销重登,只有查看图书权限
image

第三方包强制更新

image

1.2 我们开发中做权限控制

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

python+django 开发出一套公司内部项目,要带rbac的权限控制

-1 基于django的auth+admin 快速开发,有更多操作,但是没学
-2 基于django的auth+admin+第三方美化 快速开发
	-国内的:simple-ui,xadmin(弃用了)
    -国外的:
-3 基于django+vue+自定制权限 
	-djagno-vue-admin :第三方开源
    
 -4 完全自己写

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

###  1 安装
pip3 install django-simpleui
###  2 配置文件配置,注册app
	INSTALLED_APPS = [
      'simpleui',
      ...
  ]
    
# 3 菜单栏定制
# 4 自定义菜单和页面
# 5 自定义按钮
# 6 切换图标
# 7 首页显示的隐藏


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

image
进入的页面变成这个样子
image

simple-ui配置

SIMPLEUI_DEFAULT_ICON = True  # 关闭菜单栏的图标
# 自定义菜单
import time

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/'
                },
            ]
        },
    ]
}

SIMPLEUI_LOGIN_PARTICLES = False
SIMPLEUI_LOGO = 'https://avatars2.githubusercontent.com/u/13655483?s=60&v=4'
SIMPLEUI_HOME_INFO = False
SIMPLEUI_HOME_QUICK = False

自定义按钮

from .models import Book
from .models import Publish

# admin.site.register(Book)
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;'

标签:控制,name,auth,django,fa,权限,icon
From: https://www.cnblogs.com/yuezongke/p/17444148.html

相关文章

  • H3C无线控制器之RADIUS+MAC的Portal认证典型配置
    H3C无线控制器之RADIUS+MACPortal认证典型配置配置AC的接口#创建VLAN100及其对应的VLAN接口,并为该接口配置IP地址。AP将获取该IP地址与AC建立CAPWAP隧道。<AC>system-view[AC]vlan100[AC-vlan100]quit[AC]interfacevlan-interface100[AC-Vlan-interface100]ipaddress2.......
  • linux之用户和权限管理
    一、Linux安全模型3A认证用户超级管理员普通用户系统用户登陆用户用户组超级管理员组普通用户组系统组普通组用户和组的关系安全上下文二、用户和组的配置文件用户和组的主要配置文件/etc/passwd/etc/shadow/etc/group/etc/gshadow文件操作vipwvigrpwckgrpckgetnet用户和组管理命令......
  • 兼容IE,Chrome 文本控制显示三行
    谷歌浏览器得行数控制不兼容ie,加个高度限制解决。(max-height:66px;)css:.txt{display:block;height:auto;max-height:66px;overflow:hidden;text-overflow:ellipsis;word-wrap:break-word;white-space:normal!important;-webkit-line-clamp:3;......
  • 创龙教仪TL6748-PlusTEB教学实验箱实验操作教程:2-2 LED灯控制实验
    2-2LED灯控制实验(点击查看完整视频)1、实验目的本次视频教程是基于创龙教仪TL6748-PlusTEB教学实验箱完成的。本节视频的目的是学习基于StarterWare开发环境配置GPIO管脚的方法和原理,并实现StarterWare开发环境下的LED灯控制。2、实验原理StarterWareStarterWare是一个免费的软件开......
  • 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......
  • SwiftUI 使用contentShape()控制点击区域
    当我们向一个view添加TapGesture时,就会发现“有内容”的区域是可以点击的。“有内容”指的是有图片、文字、背景颜色的区域。而空白区域,是不能触发点击回调的。比如:structContentView:View{varbody:someView{VStack(spacing:124){Image(sys......
  • php获取目录权限
    要获取PHP目录权限,可以使用fileperms()函数来检索文件或目录的访问权限。以下是一个简单的示例代码:$directory='/path/to/directory';$permissions=fileperms($directory);echosubstr(sprintf('%o',$permissions),-4);这将输出一个4位的八进制数字,表示目录的权限。例......
  • 数据库简述权限和角色的概念以及它们的区别?
    1、含义权限是对资源的一种保护访问,用户要访问A资源前提是用户必须有A资源的访问权限。角色的概念:实事上我们不会直接把权限赋予给用户,而是通过角色来赋予给用户,因为用户拥有某一种权限是因为用户扮演着某一种角色。2、区别权限角色是系统功能权限设置的基础,相当于用户分组,所有用......
  • Nodejs版本控制
    Nodejs版本控制NVM全称node.jsversionmanagement,专门针对node版本进行管理的工具,通过它可以安装和切换不同版本的node.js下载地址:https://github.com/coreybutler/nvm-windows下载之后安装的时候注意不能有中文名字中文路径以及空格可以显示当前的node版本nvmlist......
  • 第六单元 流程控制
    C#流程语句分为:顺序结构,选择结构,循环结构。1.顺序结构顺序结构指的是程序一步步向下执行。inta=10;intb=a;a++;2.选择结构C#提供以下类型的选择语句。声明描述if声明一个if语句包含一个布尔表达式后跟一个或多个语句。if...else声明一个if语句可以跟......