白银狮子头
白银狮子头
  • 发布:2022-01-25 22:43
  • 更新:2022-10-11 14:59
  • 阅读:397

如何设定collection的permission,以限制普通用户只能访问自己录入的业务数据,而业务管理员可以访问全部数据?

分类:uni-app
  1. 这个问题来自于我前面的一个问题,但是为了寻找新做法,而不是问为什么有报错,我决定新开这个问题,希望获得帮助。

  2. 我在invoiceList.vue页面文件里使用clientDB 的<unicloud-db>标签来直接访问数据库,而不是通过“云函数”

    <unicloud-db ref="udb" v-slot:default="{data, pagination, loading, hasMore, error}"  
                collection="invoices"   
                field="number,amount"                 
                loadtime="manual"  
                                :where="这里怎么拼凑??"  
                @load="onDataLoad"  
                @error="onDataError">  
    <!-- 某些数据展示方式 -->  
    </unicloud-db> 
  3. 假设我使用uni-id框架,及其自带的user-role-permission设计。我新建一个collection “invoices”,每个doc有一个字段createdBy,指向创建者的user id。

    {  
    "bsonType": "object",  
    "required": ["number", "amount", "createdBy"],  
    "permission": {  
        "read": "这里怎么配置???",  
    },  
    "properties": {  
        "_id": {  
            "description": "ID,系统自动生成"  
        },  
        "number": {  
            "bsontype": "string",  
        },  
        "amount": {  
            "bsontype": "double",  
        },  
        "createdBy": {  
            "title": "录入者用户ID",  
            "bsontype": "string",  
            "forceDefaultValue": {  
                "$env": "uid"  
            },  
            "foreignKey": "uni-id-users._id"  
        }  
    }  
    }
  4. 每个普通用户都有一个“INVOICE_USER”的角色,另外有某个管理员拥有INVOICE_ADMIN的角色

  5. 我希望在列表时候<unicloud-db>可以筛选出当前登录的普通用户的所有invoice,但是不能让另一个普通用户看到

  6. 我还希望拥有“INVOICE_ADMIN”角色的管理员,在访问invoiceList.vue这个页面时,可以检索到所有用户创建的invoice

  7. 即使某普通用户拥有“INVOICE_USER”的角色,而且他有打开web debug或者使用fiddler或postman之类工具的技能也不行,并且能防止“注入攻击”

请问,
collection的“permission”应该如何设计? 我一旦写入类似"doc._id == auth.uid"的,在运行时就会报PERMISSION_ERROR

<unicloud-db></unicloud-db> 中的":where"属性,应该如何拼凑?既要能允许

2022-01-25 22:43 负责人:无 分享
已邀请:
z***@qq.com

z***@qq.com

我遇到的是另一种问题:后端跨库访问另外一个空间的数据超级管理员可以访问而普通管理员访问不到数据,报错:
code "PERMISSION_ERROR"
errCode "PERMISSION_ERROR"
message "权限校验未通过"
errMsg "权限校验未通过"

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