最新要闻
- 群晖NAS大促:四盘位DS420+历史低价
- 每日速看!Twitter被曝12月营收骤降40%:广告商抽身成主要原因
- 速递!撑伞也是雨中人什么意思_撑伞也是雨中人这句话什么意思
- Intel或将开发“视频DLSS”同款超分辨率技术:最低仅需10代酷睿
- 天天看点:侠盗猎车手圣安地列斯攻略
- 每日热议!稳了!索尼PS4/PS5之父操刀新一代PS6主机:发布时间及首发大作曝光
- 当前消息!三星Galaxy S23 Ultra又出问题:S Pen被指出现随机断连
- 数码相机卖不动:2023年1月销量大跌36%!单反惨烈
- 世界今日讯!长安深蓝全新中型SUV S7亮相:仪表盘“消失”
- 传大超转职普莱斯上尉
- 环球快播:美国一架飞机在飞行中突然强烈颠簸 竟致1人死亡
- 一口气58首歌 主办方因为周杰伦多唱被罚钱!周董回应:哥无所谓
- 环球热消息:抖店个体和企业开店费用_开店费用
- 世界关注:成都皮肤科医院排名第一_成都皮肤科医院qq
- 每日看点!硬挺不厚 穿着不热!放克纯棉T恤大促:20.1元包邮
- 售价13.99万元起 本田型格HATCHBACK正式上市
广告
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
1. 简单版
(资料图片仅供参考)
1.组件简介
该版本开发速度较快,项目业务内容固定的场景
- 用户的角色固定
- 角色对应的权限固定
2. 设计思路
- 确定所有的角色:管理员,财务,审核员
- 确定每个角色具备的权限
2.1 前端
- 登录,选择角色登录,vuex中保存用户的角色和token
- 根据登录的角色,动态加载菜单
- 在路由中定义is_menu和role字段,来判断该路由是否为菜单和能显示的角色
{ path: "/front", name: "Front", component: () => import("../views/FrontView"), meta:{ is_menu:true, roles:["manager", "admin"] } },
- 用户是否访问某一个页面
- 通过路由的导航守卫来实现
- 基于vuex中的角色。判断该角色是否能访问对应的路由
- 页面中的局部功能,如增删改查
- 按钮的展示:根据vuex中的角色判断是否展示v-if
新建 - 功能: 角色只有有对应的权限,才允许发送ajax请求,我们也可以进行角色权限的判定
if(has_permission("admin", "manager")){ }else{ }
- 按钮的展示:根据vuex中的角色判断是否展示v-if
2.2 后端
- 用户登录,生成token返回
- 再次请求,根据认证组件,判定token,是否登陆成功
- 权限的校验,根据当前登录的角色,和token中的权限进行判断
- 我们可以在每一个视图函数中判断权限
- 也可以使用drf中的权限组件进行判断 + 配置文件中的权限配置
- api的实现
3. 项目的实现
3.1 前端
页面展示效果
部分后端数据通过模拟实现
- 登录页面的实现
登录 - vuex的实现,用于保存用户登录数据
import {createStore} from "vuex"export default createStore({ state: { token: localStorage.getItem("token") || "", role: localStorage.getItem("role") || "", }, getters: {}, mutations: { login(state, {token, role}) { state.token = token state.role = role localStorage.setItem("token", token) localStorage.setItem("role", role) } }, actions: {}, modules: {}})
- 路由的编写
- 确定路由是否为菜单
- 确定路由能够访问的角色
- 菜单名字
- 路由导航守卫的编写
import {createRouter, createWebHistory} from "vue-router"import store from "@/store";const routes = [ { path: "/login", name: "login", component: () => import("../views/LoginView.vue") }, { path: "/admin", name: "admin", component: () => import("../views/AdminView.vue"), children: [ { path: "basic", name: "basic", component: () => import("../views/admin/BasicView.vue"), meta: { role: ["manager", "caiwu", "yunwei"], is_menu: true, title: "基本信息", } }, { path: "user", name: "user", component: () => import("../views/admin/UserView.vue"), meta: { role: ["manager", "yunwei"], is_menu: true, title: "用户管理", } }, { path: "role", name: "role", component: () => import("../views/admin/RoleView.vue"), meta: { role: ["manager", "caiwu"], is_menu: true, title: "角色管理" } } ] }]const router = createRouter({ history: createWebHistory(process.env.BASE_URL), routes})router.beforeEach((to, from, next) => { console.log(to) if (to.meta.role) { const role = store.state.role console.log(role) if (to.meta.role.indexOf(role) === -1) { router.push({name: "login"}) } else { next() } } else { next() }})export default router
- 按钮的展示
- 添加,删除和编辑三个按钮同过角色来进行确定是否渲染在页面
- 自定义has_permission函数基本信息
添加 编辑 删除
前端就可以动态的显示菜单和按钮
- 管理员身份
- 运维身份
3.2 后端
假设有一个学生表,我们对学生表进行操作
- 模型类
from django.db import models# Create your models here.class User(models.Model): username = models.CharField(verbose_name="用户名", max_length=32) password = models.CharField(verbose_name="密码", max_length=32) role_choice = ((1, "admin"), (2, "caiwu"), (3, "yunwei")) role = models.SmallIntegerField(verbose_name="角色", choices=role_choice, default=1)class Student(models.Model): username = models.CharField(verbose_name="用户名", max_length=32) age = models.SmallIntegerField(verbose_name="年龄") address = models.CharField(verbose_name="住址", max_length=32)
- 路由
from django.contrib import adminfrom django.urls import pathfrom rest_framework import routersfrom api import viewsrouter = routers.SimpleRouter()router.register("api/student", viewset=views.StudentView, basename="student")urlpatterns = [ path("admin/", admin.site.urls),]urlpatterns += router.urls
- 认证
class User: def __init__(self, name=None, role=None): self.name = name self.role = roleclass MineAuthentication(BaseAuthentication): def authenticate(self, request): token = request.query_params.get("token") if not token: raise AuthenticationFailed("认证失败") role = request.query_params.get("role") user = User("xxx", role) return (user, token) def authenticate_header(self, request): return "API"
- 权限
class MinePermission(BasePermission): def has_permission(self, request, view): """ 判断角色是否有对应的权限 :param request: :param view: :return: """ role = request.user.role permission_dict = settings.PERMISSIONS.get(role) request_method = request.method request_name = request_method.reslover_match.url_name if not permission_dict: return False method_list = permission_dict[request_name] if method_list and request_method in method_list: return True return False
- 视图
class StudentView(ModelViewSet): queryset = models.Student.objects.all() serializer_class = StudentModelSerializers authentication_classes = [MineAuthentication, ] permission_classes = [MinePermission, ]
- 配置文件
PERMISSIONS = { "manager": { "student-detail": ["GET", "POST"], "student-list": ["GET", "POST", "PATCH", "DELETE", "PUT"], }, "caiwu": { "student-detail": ["GET", "POST"], }, "yunwei": { "student-detail": ["GET", "POST"], "student-list": ["GET", ] }}REST_FRAMEWORK = { "UNAUTHENTICATED_USER": None, "UNAUTHENTICATED_TOKEN": None,}
-
python文件的高级应用
可读、可写r+t:可读、可写w+t:可写、可读a+t:可追加、可读 wtwithopen(& 39;36w txt& 39;,& 39;wt& 39;,encoding=&
来源: 第六章 应用层
python文件的高级应用
1. 简单版
群晖NAS大促:四盘位DS420+历史低价
每日速看!Twitter被曝12月营收骤降40%:广告商抽身成主要原因
【全球播资讯】node.js学习技巧
速递!撑伞也是雨中人什么意思_撑伞也是雨中人这句话什么意思
Intel或将开发“视频DLSS”同款超分辨率技术:最低仅需10代酷睿
天天信息:MASA Framework源码解读-01 MASAFacotry工厂设计(一个接口多个实现的最佳姿势)
环球通讯!(数据库系统概论|王珊)第九章关系查询与关系优化:习题
天天看点:侠盗猎车手圣安地列斯攻略
每日热议!稳了!索尼PS4/PS5之父操刀新一代PS6主机:发布时间及首发大作曝光
当前消息!三星Galaxy S23 Ultra又出问题:S Pen被指出现随机断连
全球短讯!Codeforces 1785 E Infinite Game 题解 (图论,自动机,dp)
数字信号处理流程
播报:P8大佬的 62条SQL优化策略,太牛X了!! 收藏起来有大用!!!
学会了Java 8 Lambda表达式,简单而实用
天天最资讯丨修复 Ubuntu 中的 “Key is stored in legacy trusted.gpg keyring” 问题
数码相机卖不动:2023年1月销量大跌36%!单反惨烈
世界今日讯!长安深蓝全新中型SUV S7亮相:仪表盘“消失”
传大超转职普莱斯上尉
环球快播:美国一架飞机在飞行中突然强烈颠簸 竟致1人死亡
一口气58首歌 主办方因为周杰伦多唱被罚钱!周董回应:哥无所谓
环球热消息:抖店个体和企业开店费用_开店费用
世界关注:成都皮肤科医院排名第一_成都皮肤科医院qq
每日看点!硬挺不厚 穿着不热!放克纯棉T恤大促:20.1元包邮
售价13.99万元起 本田型格HATCHBACK正式上市
辣眼睛?网红“安福路小公主”首度回应质疑:给自己外貌打90分 对恶评不在意
【环球播资讯】(数据库系统概论|王珊)第九章关系查询处理和关系优化-第四节:查询优化之物理优化
直播电商名词解释
超百Gbps容量!中星26号卫星成功定点:我国自研卫星平台
全球微动态丨防缩水可机洗 GXG男士针织衫:89元手慢无
Java实战(第二版)读后总结与感想
201球!姆巴佩加冕队史射手王 24岁就成第一人 2.2亿投皇马?
日系车走下神坛?本田中国2月销量大跌三成 已连跌6月
世界看点:国家老年大学正式揭牌!超40万门课程 50周岁以上可以报名
全球自动驾驶公司排名公布 特斯拉再次垫底
环球看点!大熊猫走姿神似《狂飙》高启盛 动物园回应:走路“带风”性格豪放
人脸识别还要蹲车外看摄像头?小鹏致歉:已下架第三方应用
环球观速讯丨上汽奥迪员工内购价最高优惠16万 客服:若倒卖一查到底
当前消息!谈谈 WMTS 中的 TileMatrix 与 ScaleDenominator
当前滚动:《街霸6》嘉米伸懒腰 又一次引发网友二创热潮
全球今日讯!day01-项目介绍+SSM环境搭建
快讯:送你5款免费好玩的小游戏-搜嗖工具箱
世界热文:男子微波炉加热蛋白吃饭时爆炸 家属:很后怕 幸好还没吃进嘴里
焦点观察:95后考研落榜父母上岸疑似是营销旧文:当事人已删帖清号
今日精选:《狂飙》反派戏九成是香港导演拍摄 代表作《无间道》:网友惊叹
特斯拉召回3470辆汽车:广东又现失控连撞多车冲毁店门 潮州事故争议还在
天天观速讯丨资深教师称有学校已开始裁减英语老师:有专家称不支持取消英语主科地位建议
天天实时:黑曼巴科比还在吗_黑曼巴科比
当前头条:Paper Reading: How good are query optimizers, really?
全球实时:使用ELRepo升级CentOS内核
天天热点!使用招商银行云直连服务提现
新动态:TCP通信聊天服务端和客户端(C/C++语言开发)附完整源码
焦点信息:“学雷锋” 护平安
绝了!民间大神将手机魔改成30000mAh电池:续航BT、可两周一充
【环球报资讯】可算盼到!苹果一大波春季新品要来了:黄色款iPhone 14在列
全球观热点:二叉树遍历的操作与实现
神速!Android 15全球首曝:代号“香草冰淇淋”相当甜美
正直播:感动中国2022年度人物盛典!名单揭晓:满满正能量
全球热资讯!代表谈中传硕士在火锅店当保洁:建议大学生先就业再择业
简讯:库存多到爆!今年才两个月 SSD价格就跌超3成:还会更便宜?
环球热点!男子高速公路狂飙120km/h看《狂飙》:不碰方向盘、不看正前方
小米平板6系列来了:外形、CPU配置大曝光!确认新增NFC
焦点速读:真心恐怖!南极洲深海拍到罕见冥河水母:触手约10米长
【世界热闻】无/低代码开发平台(产品)
跳过中考、高考、研考!15岁女生被西交大少年班录取:8年本硕连读
单踏板模式害死人?广东一特斯拉疑失控连撞多车冲毁店门 两人受伤现场惨
The Missing Semester - 第五讲 学习笔记
记录--在Vue3这样子写页面更快更高效
全球今日讯!打开MASA Blazor的正确姿势5:插槽
全球焦点!弯道超车成功!中国新能源汽车产销量全世界第一
每日关注!“准点下班被辞”女子申请赔偿一个月工资 公司回应:等仲裁结果
定位解析一个因脚本劫持导致webpack动态加载异常的问题
全球热文:python名称空间和作用域
天天实时:定位Dll加载异常的方法
环球热资讯!《进击的巨人》最终季完结篇开播 前篇拿下豆瓣9.7分:改编超越原作
核心部件100%国产!东风新一代商乘通用氢燃料电池产品完成
世界热文:同档网络无敌!一加Ace 2V搭载自研的游戏云专网技术
第五章 运输层
代表建议试行十二年义务教育:中考定终身太早 拒绝小学初中内卷
一男子和峨眉山猴子练搏击互殴 当事人回应:条件反射、请勿模仿
【全球新要闻】(数据库系统概论|王珊)第九章关系查询处理和关系优化-第二节:查询优化
轻松玩转Makefile | 企业项目级Makefile实例
精选! 《狂飙》“大嫂”高叶上手小米13:徕卡人像实拍样张美呆
天天时讯:3端通用!腾讯视频VIP会员年卡148元到手
当前快讯:董明珠称格力不看文凭只看能力:研究生到一线生产线非人才
济南动物园网红小黑猩猩“柒仔”去世:初步研判系突发疾病死亡
每日热议!奔驰4S店展车充新车 女子上门维权:被骗了、将走法律程序
天天快资讯丨突发!蔚来前实习生称遭同事强奸未遂 反被拒绝留用!公司:已成立调查组
“清籁”琴
环球观点:5-Nacos注册中心
灭蟑螂小窍门厨房_灭蟑螂小窍门
关于目录问题的总结-Python
天天即时看!实现js继承的几种方式以及他们的优缺点
今热点:AI修复图片画质和视频画质的方法
【热闻】数学建模(一):LP 问题
【新要闻】如何去除新家的甲醛_如何去除新家的甲醛
2023年2月随笔-难产的“学系列”
关注:乘风破浪,遇见最佳跨平台跨终端框架.Net Core/.Net生态 - 深入OpenAI与马斯克、微软的秘密,通过API轻松接入ChatGPT