zoukankan      html  css  js  c++  java
  • 云开发的数据库权限机制解读丨云开发101

    在使用云开发进行开发时,数据库权限是一个让不少人困扰的部分,四种数据库权限,到底是什么意思?其各自的权限、应用场景都是什么?大多数人对于这个机制,还是模糊的。为了帮助大家进行更好的开发,在涉及到具体的代码之前,我们先来了解一下云开发的数据库权限机制。

    一、为什么会有权限系统?

    云开发和其他常见的开发模式有一处很大的不同就是,其数据库是可以在小程序端直接进行查询,而无需通过服务端提供的特定 API 接口来完成数据查询。这样就会出现一个问题,这个数据到底谁能查?谁不能查?能查到数据的人,能修改数据么?

    在传统的应用开发模式中,权限的控制由服务端的后端接口完成,但是,在云开发的模式中,已经不存在传统的后端,因此,我们需要将权限控制进行向前移,但前端的代码因为无法保证安全(前端的数据可能被篡改,不可信),因此,我们需要将权限控制放在一个更加安全的地方,在经过多方权衡后,最终,云开发数据库就变成了云开发控制台中的一个选项。

    二、云开发权限系统中的环境与角色

    在云开发的权限中,我们会看到一些词,比如创建者所有人管理端,这些词应该如何理解呢?

    其实这里在命名上是有一些问题的,管理端和创建者、所有人并不是一个好的对比,如果将管理端更名为管理员,会更容易理解。

    从权限的层面上来看,从管理端到创建者再到所有人,权限是依次收紧的。

    管理端,或者叫管理员,其实便是指云开发中的云函数环境的执行权限。因为是在云函数中执行,安全系数较高,因而获得了最高的权限,也就是所谓的管理端权限。这个权限包括了对于所有的数据进行增、删、改、查的能力。

    创建者,则指的是创建某条数据的用户,一般来说,是指在小程序端创建数据的用户。数据和用户之间的绑定是基于数据中的 _openid 来实现的,程序在执行中,当前用户的 openid 与数据的_openid一致时,就认为这个用户是数据的创建者。

    所有人,指的是除了管理员以外的用户,这个用户一般而言,也是指小程序端的用户。数据和用户之间并不具备直接的关联关系。用户仅能通过数据库权限配置后的开放读取到用户。

    三、关于四个不同的权限

    云开发的数据库权限共四种,分别是:
    1. 仅创建者可写,所有人可读
    2. 仅创建者可读写
    3. 仅管理端可写,其他人可读
    4. 仅管理端可读写

    这四种权限各自对应着不同的场景,接下来,我们借一些例子,来看一看四种权限的不同应用场景。

    仅创建者可写,所有人可读

    这种权限是我们使用最多的权限,特别是一些涉及到UGC的场景,我们一定会需要这个权限,因为我们的需求是产生的内容所有人均可读,写的层面则允许数据的创建者可写。

    举个例子,如果你做了一个类似朋友圈的应用,那么你一定希望你的用户发的朋友圈可以被其他用户看到,但不能被其他用户修改,不然就乱套了。

    仅创建者可读写

    这种权限一般应用在一些用户的个人隐私信息的场景中。这些信息希望用户自己可以读取,但其他用户无法读取,此时,我们便需要仅创建者可读写。

    举个例子,如果你做了个人相册的功能,那么你一定希望这个相册是只有你自己能看,而不是被所有人可以看到,因此,你需要选择仅创建者可读写,而不是仅创建者可写,所有人可读。

    仅管理端可写,其他人可读

    如果描述这个权限的特性,那么就是管理员可以修改,其他人只能看。最适合的场景莫过于各种需要由开发者、平台方管控的东西,比如新闻应用的轮播图列表、商城首页的活动信息等等。这些数据的关键在于所有人都可以看到,同时,所有人也只能看到,不能修改,只能有管理员修改。

    举个例子,如果你做了一个电商小程序,那么在你的小程序中,你一定希望首页的推广 Banner 由你自己控制,而不是由用户自行控制,基于这样的考虑,你就需要仅管理端可写,其他人可读的权限。

    仅管理端可读写

    仅管理端可读写,你可以理解为只有云函数中有资格获取这个数据,其他的环境均不允许。这个权限在某些特定的场景下非常有用,举个例子,你的小程序的一些运行日志,你希望在云端可以查看,同时,这个日志不对普通用户展现,这个时候就可以设置为仅管理端可读写。

    举个例子,如果你做了一个电商小程序,那么内部的统计数据就需要设置为仅管理端可读写,这样可以确保你的运营数据不会被普通用户所读取,尽可能避免信息的泄露。

    四、常见问题

    为什么没有所有人可读写的权限?

    所有人可读写的数据库应用场景并不多见,而且大多数时候、可以通过管理端完成绕过。不过,如果你真的有了这样的场景,不妨思考一下,你的需求到底是什么?是不是因为你的数据库结构的不合理导致的需要所有人可读写?

    所有人可读写数据会造成非常多的问题,比如数据原子化、数据锁等问题,因此,在你实现数据所有人可读写时,一定要考虑场景。

    能不能实现更加细粒度的权限控制呢?

    当然是可以的,实际上,云开发的数据库中每一条由小程序段完成添加的数据都有一个字段 _openid,我们在进行数据库查询时,系统会自动替我们完成这个字段的对比,如果对比不上,再去查询对应集合的权限控制,看是否给予了非创建者可读写的权限。

    你自己在实现时,可以在数据创建时,根据业务需求,在数据中加入对应的字段,然后数据查询时,基于字段中的条件进行对比。

    如果你对于云开发有任何问题,都欢迎你在文章留言出留下你的疑问,我们将一一解答。

    云开发(CloudBase)是一款云端一体化的产品方案 ,采用 serverless 架构,免环境搭建等运维事务 ,支持一云多端,助力快速构建小程序、Web应用、移动应用。

    技术文档:https://www.cloudbase.net/

    如果你想要了解更多关于云开发CloudBase相关的技术故事/技术实战经验,请扫码关注【腾讯云云开发】公众号~

  • 相关阅读:
    找出优先要作的工作
    我要作技术研发了
    确定配色方案
    今天公司搬家
    要作界面原型了
    使用自已的命名空间
    进行审核了
    那里有皮肤软件工开发包的源码???
    发葡萄
    作业务规则挺难
  • 原文地址:https://www.cnblogs.com/CloudBase/p/11533994.html
Copyright © 2011-2022 走看看