uni-app schema 的 permission中 doc无效

发布于 1周前 作者 wuwangju 来自 Uni-App

uni-app schema 的 permission中 doc无效

操作步骤:

在schema 表级 permission中 read 设置 doc.xx == ‘任何已经存在的xx的值’

预期结果:

在前端获取相应表列表时,根据schema 表级 permission中 read 配置的 doc.xx == ‘***’ 的表达式来决定哪些条目可以被获取

实际结果:

在schema 表级 permission中 read 设置 doc.xx == ‘任何已经存在的xx的值’,运行结果中,获取相应表的列表,都报权限校验不通过

bug描述:

这是brand.schema.json配置:

{  
    "bsonType": "object",  
    "permission": {  
        "read": "doc.user_id == '669c290709664cbdd70486ad'",  
        "create": "'create-brand' in auth.permission",  
        "update": false,  
        "delete": false  
    },  
    "required": ["name"],  
    "properties": {  
        "_id": {  
            "description": "ID,系统自动生成"  
        },  
        "user_id": {  
            "bsonType": "string",  
            "foreignKey": "uni-id-users._id",  
            "description": "品牌拥有者ID, 参考`uni-id-users` 表",  
            "forceDefaultValue": {  
              "$env": "uid"  
            }  
          },  
    ...
}

当前数据表中,有3条数据的user_id字段的值都是’669c290709664cbdd70486ad‘,但是运行后,获取列表时报权限校验未通过:

image


1 回复

在uni-app中,schemapermission字段是用来定义应用跳转时所需权限的。然而,如果你遇到permissiondoc无效的情况,这可能是由于几个原因造成的。首先,确保你使用的uni-app版本支持你想要使用的特定权限,并且你正确地配置了manifest.json文件。

在uni-app中,permission字段通常用于指定跳转到小程序或应用时需要的权限,比如phoneNumber(获取手机号权限)。然而,doc并不是一个标准的uni-app权限类型。如果你的意图是处理某种文档权限,你可能需要自定义逻辑来处理这种情况。

下面是一个基本的例子,展示如何在uni-app中配置permission来请求获取手机号权限:

// manifest.json
{
  "mp-weixin": { // 微信小程序配置
    "appid": "your-app-id",
    "setting": {
      "urlCheck": false
    },
    "permission": {
      "scope.userInfo": {
        "desc": "你的位置信息将用于小程序位置接口的效果展示"
      },
      "scope.userPhone": {
        "desc": "你的手机号将用于快捷登录"
      }
    }
  }
}

在页面的JavaScript代码中,你可以这样请求权限:

// pages/index/index.vue
<template>
  <view>
    <button open-type="getPhoneNumber" @getphonenumber="getPhoneNumber">获取手机号</button>
  </view>
</template>

<script>
export default {
  methods: {
    getPhoneNumber(e) {
      if (e.detail.errMsg === "getPhoneNumber:ok") {
        // 发送临时登录凭证到后台换取手机号
        const { encryptedData, iv } = e.detail;
        // 这里发送encryptedData和iv到你的服务器进行解密
        uni.request({
          url: 'https://your-server.com/decrypt',
          method: 'POST',
          data: {
            encryptedData,
            iv
          },
          success: (res) => {
            console.log('解密后的手机号:', res.data.phoneNumber);
          }
        });
      } else {
        console.error('获取手机号失败:', e.detail.errMsg);
      }
    }
  }
}
</script>

由于doc不是一个标准的uni-app权限,如果你需要处理文档相关的权限,你可能需要在你的应用中实现自定义的权限检查逻辑。例如,你可以在用户尝试访问某个文档之前,检查他们的角色或权限状态,并根据结果允许或拒绝访问。这通常涉及到后端服务的支持,以验证用户的身份和权限。

回到顶部