8***@qq.com
8***@qq.com
  • 发布:2021-09-01 21:43
  • 更新:2021-09-02 14:34
  • 阅读:534

【报Bug】DB Schema 表级权限控制的 "create"权限失效

分类:uniCloud

产品分类: uniCloud/App

示例代码:

xxx.schema.json文件内容如下

复制代码{  
    "bsonType": "object",  
    "required": [],  
    "permission": {  
        "read": true,  
        "create": false,  
        "update": false,  
        "delete": false  
    },  
    "properties": {  
        "_id": {  
            "description": "ID,系统自动生成"  
        },  
        "title": {  
            "bsonType": "string",  
            "description": "文章题目",  
            "title": "文章题目"  
        },  
        "content": {  
            "bsonType": "string",  
            "description": "文章内容",  
            "title": "文章内容"  
        },  
        "create_user": {  
            "bsonType": "string",  
            "foreignKey": "uni-id-users._id",  
            "description": "新建该计划的用户ID",  
            "forceDefaultValue": {  
                "$env": "uid"  
            }  
        }  
    }  
}  

前端代码(使用schema2code生成)

复制代码<template>  
    <view class="uni-container">  
        <uni-forms ref="form" :value="formData" validate-trigger="submit" err-show-type="toast">  
            <uni-forms-item name="title" label="文章题目">  
                <uni-easyinput placeholder="文章题目" v-model="formData.title"></uni-easyinput>  
            </uni-forms-item>  
            <uni-forms-item name="content" label="文章内容">  
                <uni-easyinput placeholder="文章内容" v-model="formData.content"></uni-easyinput>  
            </uni-forms-item>  
            <view class="uni-button-group">  
                <button type="primary" class="uni-button" @click="submit">提交</button>  
            </view>  
        </uni-forms>  
    </view>  
</template>  

<script>  
    import {  
        validator  
    } from '../../js_sdk/validator/admin-article-test.js';  

    const db = uniCloud.database();  
    const dbCollectionName = 'admin-article-test';  

    function getValidator(fields) {  
        let result = {}  
        for (let key in validator) {  
            if (fields.indexOf(key) > -1) {  
                result[key] = validator[key]  
            }  
        }  
        return result  
    }  

    export default {  
        data() {  
            let formData = {  
                "title": "",  
                "content": ""  
            }  
            return {  
                formData,  
                formOptions: {},  
                rules: {  
                    ...getValidator(Object.keys(formData))  
                }  
            }  
        },  
        onReady() {  
            this.$refs.form.setRules(this.rules)  
        },  
        methods: {  
            /**  
             * 触发表单提交  
             */  
            submit() {  
                uni.showLoading({  
                    mask: true  
                })  
                this.$refs.form.validate().then((res) => {  
                    this.submitForm(res)  
                }).catch(() => {  
                    uni.hideLoading()  
                })  
            },  

            submitForm(value) {  
                // 使用 clientDB 提交数据  
                db.collection(dbCollectionName).add(value).then((res) => {  
                    uni.showToast({  
                        icon: 'none',  
                        title: '新增成功'  
                    })  
                    this.getOpenerEventChannel().emit('refreshData')  
                    setTimeout(() => uni.navigateBack(), 500)  
                }).catch((err) => {  
                    uni.showModal({  
                        content: err.message || '请求服务失败',  
                        showCancel: false  
                    })  
                }).finally(() => {  
                    uni.hideLoading()  
                })  
            }  
        }  
    }  
</script>   

操作步骤:

使用uni-admin结合schema2code生成页面,正确保存.schema.json文件并成功上传数据集合Schema。
给普通用户 read 权限但前端界面保留添加记录的功能,前端使用普通用户登录,创建数据记录。代码见附件。

预期结果:

预期浏览器控制台应该输出错误,提示权限校验失败

实际结果:

实际程序可以允许,并且可以给数据库添加数据记录,权限校验没有起作用。

bug描述:

schema 表级权限中配置 create 权限为 false 或者不配置该权限时,使用非 admin 普通用户登录后,前端仍然可以通过db.collection(***).add(***)创建记录。(已正确保存文件并成功上传数据集合Schema,在 unicloud web控制台也可以看到修改,但是确实无法控制普通用户创建数据)
重新用一个demo复现了这个bug,项目文件见附件。

2021-09-01 21:43 负责人:DCloud_uniCloud_WYQ 分享
已邀请:
DCloud_uniCloud_WYQ

DCloud_uniCloud_WYQ

此问题已在云端修复,重新上传schema可以看到效果

  • 8***@qq.com (作者)

    现在的权限限制又过于强了,false的时候连admin用户都创建不了,只能把false随便改成一个 xxx in auth.permission,这样admin用户才能创建

    2021-09-03 10:58

  • DCloud_uniCloud_WYQ

    回复 8***@qq.com: 了解,我们调整下

    2021-09-03 15:26

  • DCloud_uniCloud_WYQ

    回复 8***@qq.com: 感谢你的反馈,此问题已修复

    2021-09-03 15:48

该问题目前已经被锁定, 无法添加新回复

  • 标题 / 粗斜体
  • 代码片段
  • 超链接 / 图片 / 视频
  • 列表 / 引用

文章内容较多时,可以用标题分段 :

## 大标题 
### 小标题

斜体 / 粗体 :

**粗体** 
*斜体*
***粗斜体***

代码片段 :

``` javascript
代码片段
```

超链接 :

[链接文字](链接地址) 例: [百度](http://www.baidu.com)

图片 :

![图片说明](图片地址) 例: ![百度logo](http://www.baidu.com/img/bdlogo.gif)

视频 :

!![视频说明](视频地址) 例: !![优酷视频](http://youku.com)

有序列表 :

1. 123
2. 123
3. 123

无序列表 :

- 123
- 123
- 123

引用 : ( 双回车后结束引用 )

> 引用内容
引用内容
引用内容