使用node-appwrite创建Appwrite团队时遇Invalid Roles错误求助
问题:使用node-appwrite创建团队时返回「Invalid roles」错误
使用node-appwrite包创建Appwrite团队时,收到「Invalid roles」响应,相关代码如下:
import Sdk, { Permission, Role } from 'node-appwrite' const client = new Sdk.Client() client .setEndpoint(process.env.SERVER_URI) .setProject(process.env.PROJECT_ID) .setKey(process.env.SERVER_API_KEY) const teams = new Sdk.Teams(client) await teams.create('comics', 'Comics and Superheroes', [ Permission.read(Role.users()), Permission.update(Role.team('admin')), Permission.delete(Role.team('admin')) ])
错误响应:
{ code: 400, type: 'general_argument_invalid', response: { message: "Invalid roles: Value must a valid array and Parameter must contain at most 36 chars. Valid chars are a-z, A-Z, 0-9, period, hyphen, and underscore. Can't start with a special char", code: 400, type: 'general_argument_invalid', version: '1.2.0' } }
打印传递给服务器的参数,结果为:
[ 'read("users")', 'update("team:admin")', 'delete("team:admin")' ]
解决方案
核心问题
你混淆了teams.create和teams.updatePermissions的参数用途:
teams.create的第三个参数是角色列表(roles),用于指定给创建团队的用户分配的角色(比如team:admin、owner),要求是符合规则的纯角色标识符字符串。- 你传入的是权限规则字符串(带括号、引号),这是
teams.updatePermissions方法的参数,不符合roles参数的格式要求,因此触发错误。
正确代码示例
先创建团队,再单独设置权限规则:
import Sdk, { Permission, Role } from 'node-appwrite' const client = new Sdk.Client() client .setEndpoint(process.env.SERVER_URI) .setProject(process.env.PROJECT_ID) .setKey(process.env.SERVER_API_KEY) const teams = new Sdk.Teams(client) // 创建团队:第三个参数是给创建者的角色(可选,默认是['owner']) await teams.create('comics', 'Comics and Superheroes', ['team:admin']); // 更新团队权限:传入权限规则数组 await teams.updatePermissions('comics', [ Permission.read(Role.users()), Permission.update(Role.team('admin')), Permission.delete(Role.team('admin')) ]);
补充说明
- 如果不需要给创建者指定特殊角色,
teams.create的第三个参数可以省略,默认会给创建者分配owner角色。 - 角色标识符必须符合规则:仅包含a-z、A-Z、0-9、
.、-、_,不能以特殊字符开头,长度不超过36位。
内容的提问来源于stack exchange,提问作者Penny Codes
相关产品推荐
相关产品推荐

