【发布时间】:2017-11-02 09:14:00
【问题描述】:
我正在尝试设置一个环回项目,但遇到了一个我无法弄清楚的基本问题。
所以我基本上定义了一个自定义用户模型,其中包含以下关系和 acl:
"relations": {
...
"projects": {
"type": "hasMany",
"model": "project",
"foreignKey": "userId"
}
}
"acls": [
{
"accessType": "*",
"principalType": "ROLE",
"principalId": "$everyone",
"permission": "DENY"
},
{
"accessType": "READ",
"principalType": "ROLE",
"principalId": "$owner",
"permission": "ALLOW"
}
]
还有一个用属性定义的“项目”模型:
"relations": {
"user": {
"type": "belongsTo",
"model": "user",
"foreignKey": "userId"
}
},
"acls": [
{
"accessType": "*",
"principalType": "ROLE",
"principalId": "$everyone",
"permission": "DENY"
},
{
"accessType": "*",
"principalType": "ROLE",
"principalId": "$owner",
"permission": "ALLOW"
},
{
"accessType": "EXECUTE",
"principalType": "ROLE",
"principalId": "$authenticated",
"permission": "ALLOW",
"property": "create"
}
]
首先,令我惊讶的是,在登录时提交 POST /projects 时,我希望外键会自动放入对象中,但看起来这必须手动完成。我想这很正常,我想我对框架的期望太高了。
话虽如此,我一直在努力列出登录用户拥有的所有项目。使用 {id} 执行 GET /projects/{id} 是属于已登录用户的对象。当 {id} 指向不属于登录用户的对象时,我得到了预期的 401。
但是,我期待运行 /projects 会返回登录用户拥有的所有项目,但会向我抛出 401。
我错过了什么?我的 ACL 设置错误吗?我使用了错误的方法吗?我尝试放置一个像 '{"where":{"userId":"myId"}}' 这样的过滤器,但没有运气。我还尝试了其他端点 /user/myId/projects,但运气不佳。
谢谢
【问题讨论】:
-
您能否检查您的
model-config.json以确保内置的User模型不是公开的?您可能正在路由到它而不是您的自定义user模型。 -
@Ivan Schwarz 感谢您的回复,用户未定义为公开。这是它的 def "User": { "dataSource": "db", "public": false, "options": { "realmRequired": true, "realmDelimiter": ":" } }
-
1) 根据docs,仅对路径上有
:id的远程方法执行$owner检查,例如GET /projects/:id。 2)GET /user/:id/projects返回 401,因为它遵循您的user模型上的 ACL,并且这些不允许列出项目。您正在寻找允许__get__projects属性。
标签: javascript node.js foreign-keys acl loopback