我是环回的新手。我为所有用户创建了ACL拒绝权限($ everyone)。但我可以通过swagger访问所有API。任何人都可以解释这个吗? 以下是我的ACL。感谢。
"acls": [
{
"accessType": "*",
"principalType": "ROLE",
"principalId": "$everyone",
"permission": "DENY"
}
]
答案 0 :(得分:6)
可能的原因:
要enable access control,您必须致电enableAuth()
。例如,在引导脚本server/boot/authentication.js
中:
module.exports = function enableAuthentication(server) {
server.enableAuth();
};
另请检查您的server/model-config.json
文件,看看您的ACL
,RoleMapping
和Role
型号是否与您的数据源正确关联。
您的ACL是正确的,因此问题出在其他地方。如果我的回答对您没有帮助,您可能想要克隆loopback-example-access-control repository,尝试它是否适合您并最终尝试弄清楚它与您的解决方案有何不同。
您还可以通过为控制台指定值为DEBUG
的{{1}}环境变量来尝试debug,以便记录查找并检查服务器在请求进入时的效果。
答案 1 :(得分:1)
尝试删除accessType
,如下所示:
{
"principalType": "ROLE",
"principalId": "$everyone",
"permission": "DENY"
}
否则,最好的办法是克隆LoopBack-sandbox并在该存储库中重现该问题并在GitHub上发布问题。
答案 2 :(得分:0)
尝试将accessType
字段值从EXECUTE
更改为*
。
答案 3 :(得分:0)
It also depending on your base model, as it might get overwritten by the base model's ACL.
For example, if your model is a User
base model, the "create"
method will still work even if you put DENY
to $everyone
, unless you specify "property": ["create"]
.
"acls": [
{
"principalType": "ROLE",
"principalId": "$everyone",
"permission": "DENY",
"property": [
"create"
]
}
]
Reference (List of User base ACLs): https://github.com/strongloop/loopback/blob/master/common/models/user.json