文档章节

实战教程|数据校验 - 步入高阶开发的必修课

知晓云
 知晓云
发布于 02/28 18:27
字数 1293
阅读 130
收藏 0
作者:张泽栓
首发于知晓云 - 
小程序开发快人一步

数据校验是为保证数据的完整性、合法性进行的一种验证操作。方法很多,都很繁琐。本着为你解决后端那些麻烦事儿的初心。知晓云隆重推出开年以来第一个重大更新——「校验器」。

  • 知晓云内置的 ACL 权限控制和数据表字段属性规则可轻松应对简单的权限控制、字段校验;

  • 校验器在此基础上支持编写自定义校验逻辑以处理逻辑复杂、安全性要求高的业务场景;

  • 校验器的处理完全在云服务器上进行,安全、可靠;

  • 校验器和云函数组合使用,让数据校验逻辑与业务逻辑解耦,代码管理更轻松。

本文将以电商后台订单的校验处理为例,带你快速解锁新知识。

校验器简述

校验器用于数据创建、更新、删除等操作时校验操作的合法性,可以非常方便地处理权限复杂、安全性要求高的场景。数据表关联了校验器后,在进行正常的数据操作时,存储引擎会自动调用该校验器进行校验。校验器通过返回 truefalse 或抛出错误来对操作合法性做出评判。只有当校验器返回 true 时,操作才能继续正常进行下去,有效拦截非法操作。

使用校验器的好处

在权限控制、字段校验上,知晓云通过 ACL 权限设定和字段属性规则,可以非常方便地对一般场景进行处理。如,帖子数据表,所有用户都可以创建帖子,但帖子只有帖子创建者才能修改,其他用户只能查看,这个通过 ACL 的规则设定即可完成;创建修改帖子时,帖子标题需要大于 10 个字,也能通过字段属性规则设定字符串长度限制完成。但如果是更加复杂一点的场景,如只有绑定了手机号的用户才能创建帖子,ACL 权限和字段属性规则就不好办了,这个时候,就要使用云函数,在云函数内编写代码来完成数据创建与更新的工作。

虽然问题得到了解决,但客户端、小程序端则要从使用 sdk 提供的数据操作接口,变成调用云函数调用接口,在 io 层的封装上更加复杂。

随着校验器的上线,这个问题可以得更加优雅的解决:客户端正常调用数据操作方法进行增删改,校验器自动被数据引擎调用执行。更进一步的,调用 open api、运营后台 api 时,校验器都会被执行,避免多端逻辑因为入口不一致的规则不统一问题。

此外,相对于云函数,校验器的语法逻辑更简单。返回 true  false 来进行判定即可。而且我们还内置了校验模版。开发者只需要在模版的对应位置加入判定逻辑即可。

综上所述,校验器有以下几个优点:

  1. 补充自带的 ACL 权限控制的不足,支持自定义规则,权限控制更加强大、细致。

  2. 数据校验逻辑与业务逻辑解耦。

  3. 创建方便、语法简单,官方提供模版,上手快。

校验器实战

只需两步,即可成功创建并使用校验器:

1. 在「知晓云」-「控制台」-「数据表」中创建校验器 。

 

 

2. 校验器创建成功后,进入编辑页面,只需要在默认提供的校验器模版代码对应的 handler 如 onCreate、onUpdate 等中加入判定逻辑即可。

下面是一个完整的校验器例子,实现了以下规则:

  1. 所有用户可以创建订单

  2. 只允许用户 1001 删除订单

  3. 禁止了批量创建、批量更新、批量删除

  4. 禁止取消已过期订单

BaaS.useVersion('v3.4')exports.main = async function (event) {  const handlers = {    async onCreate(data) {      return true    },    async onUpdate(data) {      if (event.data.before.status === '已过期' && event.data.payload.status === '已取消') {        throw Error('已过期的订单不可取消')      }      return true    },    async onDelete(data) {      if (data.user_id == 1001) {        return true      } else {        throw Error(`用户 ${data.user_id} 无操作权限`)      }    },    async onBulkCreate(data) {      return false    },    async onBulkUpdate(data) {      return false    },    async onBulkDelete(data) {      return false    },  }  const validator = new BaaS.Validator(handlers)  return validator.validate(event)}

以上。

如果你有其他需求,可以在知晓云产品路线图提交需求或添加客服微信(minsupport3)等方式告诉我们,非常感谢大家一如既往的支持~

© 著作权归作者所有

知晓云
粉丝 1
博文 49
码字总数 79133
作品 0
广州
私信 提问
加载中

评论(0)

数据仓库理论篇简明视频教程录制计划

本人有七八年的数据仓库项目建设经验(当然也参加过很多次原厂商的培训),现计划录制数据仓库系列视频教程,包括理论篇和实战篇,讲解数据仓库实际项目中的建设方法,设计思想和相关工具的使...

荷露叮咚
2013/12/20
0
0
公开课发布:《MySQL最佳实践32条》by吴炳锡

特邀嘉宾 吴炳锡 知数堂《MySQL实战》课程讲师 业界知名MySQL DBA 曾任职新媒传信首席数据架构师 多年MySQL及系统架构设计及培训教学经验 擅长:MySQL运维、数据库高可用及多IDC架构设计、 ...

n88lpo
2018/05/04
0
0
以太坊中的国际银行账号iban

简单地说,以太坊中的iban账号是以太坊为了和传统的银行系统对接而引入的概念,web3.js中提供了以太坊地址和iban地址之间的转换方法。 iban:国际银行账号 iban这个概念源于传统的银行系统,...

智能合约
2018/06/07
40
0
讲给后台程序员看的前端系列教程(63)——jQuery应用示例

C语言自学完备手册(33篇) Android多分辨率适配框架 JavaWeb核心技术系列教程 HTML5前端开发实战系列教程 MySQL数据库实操教程(35篇图文版) 推翻自己和过往——自定义View系列教程(10篇) 走出...

谷哥的小弟
2019/10/23
0
0
高级Java架构学习资源来了——(1-5年开发 小白误入)

大型互联网公司分布式架构原理概述 http://www.365yg.com/item/6471499647222284814/ Mysql索引底层数据结构剖析 http://www.365yg.com/item/6470767465080029710/ 老司机带你用正确的姿势看...

阿阳啊啊
2017/10/08
0
0

没有更多内容

加载失败,请刷新页面

加载更多

activiti 工作流数据库表详细介绍(23张表)

Activiti的后台是有数据库的支持,所有的表都以ACT_开头。 第二部分是表示表的用途的两个字母标识。 用途也和服务的API对应。 ACT_RE_*: 'RE'表示repository。 这个前缀的表包含了流程定义和...

osc_2gaqqnhg
3分钟前
2
0
【Python3 爬虫】U34_selenium操作cookie

目录 1.示例代码 2.实战演练 1.示例代码 获取所有的cookie:for cookie in driver.get_cookies(): print(cookie) 根据cookie的key获取value: value = driver.get_cookie(key) 删...

osc_we9lokaj
4分钟前
6
0
【Python3 爬虫】U35_selenium隐式等待和显示等待

目录 1.隐式等待 2.显示等待 3.实战演练 3.1 隐式等待案例 3.2 显示等待案例 现在的网页越来越多采用了 Ajax 技术,这样程序便不能确定何时某个元素完全加载出来了。如果实际页面等待时间过长...

osc_2wq8ft8d
6分钟前
8
0
一文读懂 K8s 持久化存储流程

作者 | 孙志恒(惠志) 阿里巴巴开发工程师<br /> **导读:**众所周知,K8s 的持久化存储(Persistent Storage)保证了应用数据独立于应用生命周期而存在,但其内部实现却少有人提及。K8s 内...

阿里巴巴云原生
6分钟前
17
0
为什么大公司一定要使用微服务?

作者:飒然Hang https://www.rowkey.me/blog/2019/05/30/msa/ 这几年在 Java 工程师招聘时,会看到很多人的简历都写着使用了 Spring Cloud 做微服务实现,使用 Docker 做自动化部署,并且也会...

Java技术栈
7分钟前
14
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部