当前位置: 首页 > news >正文

互联网前后端分离的开发场景,一般会员和数据权限的判断是放在前端还是后端?

  • 推荐学习文档
    • golang应用级os框架,欢迎star
    • golang应用级os框架使用案例,欢迎star
    • 案例:基于golang开发的一款超有个性的旅游计划app经历
    • golang实战大纲
    • golang优秀开发常用开源库汇总
    • 想学习更多golang知识,这里有免费的golang学习笔记专栏

文章目录

    • 从安全性角度
      • 防止数据篡改
      • 数据一致性
    • 从业务逻辑完整性角度
      • 复杂业务规则
      • 数据源的唯一信赖

在互联网前后端分离的开发场景中,一般将会员和数据权限的判断放在后端。

从安全性角度

防止数据篡改

  • 前端:如果将会员和数据权限判断放在前端,恶意用户可以通过浏览器开发者工具等手段轻易修改前端代码或者拦截请求并篡改数据,从而绕过前端的权限判断逻辑。例如,用户可能将表示自己权限级别的字段从 “普通会员” 修改为 “高级会员”,试图获取高级会员才能访问的数据。
  • 后端:后端是数据的最终处理者,在后端进行权限判断可以直接依据可靠的数据源(如数据库中的用户权限记录)进行校验。后端收到请求后,根据用户的登录状态(如从会话或令牌中获取用户身份信息)查询数据库中该用户的权限设置,然后判断该用户是否有权执行请求的操作。这样可以确保即使前端被恶意篡改,也无法突破后端的权限控制,从而保障数据安全。

数据一致性

  • 前端:前端的权限判断依赖于从后端获取的初始数据,如果前端本地数据被篡改或者与后端数据不同步(例如由于网络问题导致前端缓存的权限数据过期但未更新),就会导致权限判断不准确。
  • 后端:后端始终以数据库中的权威数据为准进行权限判断,能够保证数据的一致性。无论前端的状态如何,后端都能根据最新、最准确的权限设置来决定是否允许操作,避免因前端数据不一致而产生的安全漏洞。

从业务逻辑完整性角度

复杂业务规则

  • 前端:前端的主要任务是展示数据和接收用户交互,如果将复杂的会员和数据权限判断放在前端,会使前端代码变得臃肿和难以维护。例如,一个涉及多个角色(如会员、管理员、超级管理员)、多种数据类型(如个人信息、财务数据、机密文档)且具有不同权限层次(如只读、读写、删除等权限)的业务场景,前端难以完整地处理所有的业务逻辑。
  • 后端:后端可以更好地处理复杂的业务逻辑。它可以通过模块化的设计,清晰地定义不同角色对不同数据资源的权限规则。例如,在一个电商系统中,后端可以方便地定义普通会员只能查看自己的订单,而管理员可以查看和修改所有订单的逻辑。这种在后端集中处理业务逻辑的方式,使得系统的业务逻辑更加清晰、易于维护和扩展。

数据源的唯一信赖

  • 前端:前端本身不应该是权限判断的最终依据,因为它无法直接获取所有可能影响权限判断的信息。例如,在一个多系统集成的场景中,用户在一个外部系统中的某些操作可能会影响其在本系统中的权限,但前端无法及时知晓这些外部系统的状态变化。
  • 后端:后端可以整合来自多个数据源(如不同数据库、外部服务接口等)的信息来进行全面的权限判断。它能够及时获取到系统内外部的各种信息变化,从而准确地根据最新情况判断会员的权限,确保业务逻辑的完整性。

希望本文对你有所帮助!如果你有任何问题或建议,欢迎在评论区留言。

关注我看更多有意思的文章哦!👉👉

相关文章:

  • 二叉树进阶oj题【二叉树相关10道oj题的解析和c++代码实现】
  • 2024.09.19 校招 实习 内推 面经
  • 简单vue指令实现 el-table 可拖拽表格功能
  • Java 图片合成
  • Unity3D 客户端多开
  • 5个python多线程简单示例
  • 一次实践:给自己的手机摄像头进行相机标定
  • 用于视觉的MetaFormer基线模型
  • 数据结构-4.1.特殊矩阵的压缩存储
  • C++11 多线程编程-小白零基础到手撕线程池
  • 秋招内推--招联金融2025
  • 论文阅读:多模态医学图像融合方法的研究进展
  • 负载均衡架构解说
  • C++ Linux多进程同步-命名信号量
  • HarmonyOS NEXT:实现电影列表功能展示界面
  • -------------------- 第二讲-------- 第一节------在此给出链表的基本操作
  • .pyc 想到的一些问题
  • 【Leetcode】104. 二叉树的最大深度
  • 【译】理解JavaScript:new 关键字
  • JAVA 学习IO流
  • k个最大的数及变种小结
  • quasar-framework cnodejs社区
  • Theano - 导数
  • vue学习系列(二)vue-cli
  • windows-nginx-https-本地配置
  • 从零开始的webpack生活-0x009:FilesLoader装载文件
  • 技术攻略】php设计模式(一):简介及创建型模式
  • 漫谈开发设计中的一些“原则”及“设计哲学”
  • 职业生涯 一个六年开发经验的女程序员的心声。
  • 转载:[译] 内容加速黑科技趣谈
  • 自制字幕遮挡器
  • 如何用纯 CSS 创作一个货车 loader
  • ​渐进式Web应用PWA的未来
  • #调用传感器数据_Flink使用函数之监控传感器温度上升提醒
  • %3cli%3e连接html页面,html+canvas实现屏幕截取
  • (01)ORB-SLAM2源码无死角解析-(66) BA优化(g2o)→闭环线程:Optimizer::GlobalBundleAdjustemnt→全局优化
  • (C++二叉树05) 合并二叉树 二叉搜索树中的搜索 验证二叉搜索树
  • (k8s)Kubernetes 从0到1容器编排之旅
  • (八)Spring源码解析:Spring MVC
  • (八十八)VFL语言初步 - 实现布局
  • (多级缓存)多级缓存
  • (二)JAVA使用POI操作excel
  • (二)Linux——Linux常用指令
  • (附源码)ssm捐赠救助系统 毕业设计 060945
  • (附源码)ssm失物招领系统 毕业设计 182317
  • (四)进入MySQL 【事务】
  • (算法)求1到1亿间的质数或素数
  • (一)80c52学习之旅-起始篇
  • (一)模式识别——基于SVM的道路分割实验(附资源)
  • (游戏设计草稿) 《外卖员模拟器》 (3D 科幻 角色扮演 开放世界 AI VR)
  • (终章)[图像识别]13.OpenCV案例 自定义训练集分类器物体检测
  • (转)Android学习笔记 --- android任务栈和启动模式
  • (转)C#开发微信门户及应用(1)--开始使用微信接口
  • (转)使用VMware vSphere标准交换机设置网络连接
  • *p=a是把a的值赋给p,p=a是把a的地址赋给p。