uni-app DB Schema read权限设置为 news_title != 'something' 不起作用

uni-app DB Schema read权限设置为 news_title != ‘something’ 不起作用

操作步骤:

预期结果:

实际结果:

bug描述:

{
    "bsonType": "object",  
    "required": ["news_title"],  
    "permission": {  
        "read": "'title2' != doc.news_title",  
        "create": true,  
        "update": true,  
        "delete": true  
    },  
    "properties": {  
        "_id": {  
            "description": "ID,系统自动生成"  
        },  
        "title": {  
            "bsonType": "string",  
            "title": "标题"  
        },  
        "cover": {  
            "bsonType": "file",  
            "title": "封面",  
            "fileMediaType": "image"  
        },  
        "content": {  
            "bsonType": "string",  
            "title": "内容"  
        },  
        "news_title": {  
            "bsonType": "string",  
            "title": "标题2"            
        }  
    }  
}

前端普通用户居然可以读到 news_title 为排除条件的记录,把 where 设置为 "news_title == 'title2'",也完全可以读取出来,太令人困惑了。


更多关于uni-app DB Schema read权限设置为 news_title != 'something' 不起作用的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

改为"read": "doc.news_title !== ‘title2’"试试呢

更多关于uni-app DB Schema read权限设置为 news_title != 'something' 不起作用的实战教程也可以访问 https://www.itying.com/category-93-b0.html


!== 会提示出错的,一开始写的就是 “doc.news_title != ‘title2’” 也不行的,这么大的bug都没被发现?

在uni-app的DB Schema权限配置中,权限表达式不支持直接使用文档字段进行比较。read权限中的'title2' != doc.news_title这种写法是无效的,因为权限表达式只能使用简单的逻辑判断,不能直接引用字段值进行比较。

正确的做法是:

  1. read权限中设置true允许读取
  2. 在前端查询时通过where条件来过滤:db.collection('your_collection').where("news_title != 'title2'").get()

权限配置应该简化为:

"permission": {  
    "read": true,
    "create": true,  
    "update": true,  
    "delete": true  
}
回到顶部