uni-app中拥有CREATE_UNI_ID_USERS权限的用户在创建用户时仍报权限错误

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

uni-app中拥有CREATE_UNI_ID_USERS权限的用户在创建用户时仍报权限错误
设置了角色,包含 ID为 CREATE_UNI_ID_USERS 的权限

将此角色赋予 用户A,用户A创建新用户时还是报了 权限错误的提示,以下是详情,部分内容去除了:

{
  "method": "serverless.function.runtime.invoke",
  "params": "{\"functionTarget\":\"uni-id-co\",\"functionArgs\":{\"method\":\"addUser\",\"params\":[{\"username\":\"test12345\",\"nickname\":\"test12345\",\"password\":\"test12345\",\"role\":[\"ABC\"],\"authorizedApp\":[\"......\"],\"status\":0}],\"clientInfo\":{\"PLATFORM\":\"web\",\"OS\":\"windows\",\"APPID\":\"......\",\"DEVICEID\":\"......\",\"scene\":......,\"appId\":\"......\",\"appLanguage\":\"zh-Hans\",\"appName\":\"......\",\"appVersion\":\"1.0.0\",\"appVersionCode\":\"100\",\"browserName\":\"firefox\",\"browserVersion\":\"134.0\",\"deviceId\":\"......\",\"deviceModel\":\"PC\",\"deviceType\":\"pc\",\"hostName\":\"firefox\",\"hostVersion\":\"134.0\",\"osName\":\"windows\",\"osVersion\":\"10 x64\",\"ua\":\"......\",\"uniPlatform\":\"......\",\"uniRuntimeVersion\":\"......\",\"locale\":\"zh-Hans\",\"LOCALE\":\"zh-Hans\"},\"uniIdToken\":\"......\"}}",
  "spaceId": "......",
  "timestamp": 1736333952271,
  "token": "......"
}

响应:

{
  "success": true,
  "data": {
    "errCode": "uni-id-permission-error",
    "errMsg": "权限错误"
  },
  "header": {........}
}

请问这是为什么?

项目创建方式 开发环境 版本号
web windows 1.0.0
firefox 134.0

1 回复

在uni-app中,如果你遇到拥有CREATE_UNI_ID_USERS权限的用户在创建用户时仍然报告权限错误的问题,这通常可能是由于权限配置不正确、代码实现有误或者权限验证逻辑未能正确执行等原因引起的。以下是一个示例代码,展示了如何在uni-app中正确配置和使用uni-id进行用户创建操作,并确保权限验证逻辑正确。

首先,确保你的uni-app项目已经集成了uni-id服务,并且已在管理后台为相关用户或角色分配了CREATE_UNI_ID_USERS权限。

1. 初始化uni-id

在你的项目入口文件(如main.js)中,初始化uni-id服务:

import uniId from '@dcloudio/uni-id';

uniId.init({
  client: uni.getStorageSync('uni-id-client') || '', // 从本地存储获取客户端标识
  server: 'https://your-uni-id-server-url', // 替换为你的uni-id服务地址
  autoLogin: true, // 自动登录
  ...otherOptions
});

2. 创建用户

在需要创建用户的页面中,使用uni-id的createUser方法。注意,确保调用此方法的用户具有相应的权限。

// 假设你已经有一个包含用户信息的对象userInfo
const userInfo = {
  username: 'newuser',
  password: 'password123',
  // 其他用户信息字段
};

uniId.createUser(userInfo)
  .then(response => {
    console.log('用户创建成功:', response);
    // 处理成功逻辑
  })
  .catch(error => {
    if (error.code === 'PERMISSION_DENIED') {
      console.error('权限错误: 用户没有CREATE_UNI_ID_USERS权限');
    } else {
      console.error('用户创建失败:', error);
    }
    // 处理错误逻辑
  });

3. 权限验证

如果你需要在代码中显式验证用户权限,可以在调用createUser之前进行权限检查(虽然通常uni-id服务会在后端进行此验证)。

// 假设你有一个函数checkPermission来验证用户权限
async function checkPermission() {
  const hasPermission = await uniId.hasPermission('CREATE_UNI_ID_USERS');
  if (!hasPermission) {
    throw new Error('当前用户没有CREATE_UNI_ID_USERS权限');
  }
}

// 在调用createUser之前调用checkPermission
checkPermission()
  .then(() => {
    // 权限验证通过,继续创建用户
    uniId.createUser(userInfo)
      .then(response => {
        // 处理成功逻辑
      })
      .catch(error => {
        // 处理错误逻辑
      });
  })
  .catch(error => {
    // 处理权限验证失败逻辑
  });

通过上述代码,你可以确保在uni-app中正确地使用uni-id服务进行用户创建,并且处理相关的权限错误。如果问题仍然存在,请检查uni-id服务的配置和日志,以确定是否还有其他潜在的问题。

回到顶部