我在使用mongodb在loopback项目中设置管理员角色时遇到问题。我已经设置了一个简单的模型,添加了acls,创建了一个用户并将用户与admin角色相关联,但是我无法通过API Explorer访问该模型 - 它总是带有"授权必需"
以下是我采取的步骤:
1)我通过slc添加了模型测试:
slc loopback:model ?输入型号名称:test ?选择要测试的数据源:moti_db(mongodb) ?选择模型的基类:PersistedModel ?通过REST API公开测试?是 ?自定义复数形式(用于构建REST URL): 现在让我们添加一些测试属性。
Enter an empty property name when done.
? Property name: name
? Property type: string
? Required? No
2)通过注册页面创建用户:id = 1
3)通过API创建管理员角色:id = 1
4)将Role和RoleMapping更改为public = true所以我可以通过其余的api设置它们
这是测试数据模型:
{
"name": "test",
"base": "PersistedModel",
"idInjection": true,
"properties": {
"name": {
"type": "string"
}
},
"validations": [],
"relations": {},
"acls": [
{
"accessType": "*",
"principalType": "ROLE",
"principalId": "$everyone",
"permission": "DENY"
},
{
"accessType": "*",
"principalType": "ROLE",
"principalId": "admin",
"permission": "ALLOW"
}
],
"methods": []
}
这里是角色
{
"id": 1,
"name": "admin",
"created": "2015-05-22T19:45:23.887Z",
"modified": "2015-05-22T19:45:23.887Z"
}
这里是RoleMapping:
{
"id": 1,
"principalType": "USER",
"principalId": "1",
"roleId": 1
}
答案 0 :(得分:1)
您是否在资源管理器的顶部设置了授权令牌?您需要使用电子邮件和密码调用User.login(),然后将Auth Token设置为返回的auth ID值。然后,此令牌随所有后续调用一起发送(作为authorization:
标头值,并允许您进行需要身份验证的调用。
另一个有用的事情是使用ACL调试运行API,你可以
DEBUG=loopback:security slc run
它将显示它如何确定访问权限。也许输出会有所帮助(粘贴在这里)。否则,这只是猜测,因为您的代码看起来很好并且假设您之前已登录并正在使用令牌。