我正在使用loopback为SPA网站创建一个简单的API . 我想让我的权限尽可能简单,所以我最终得到了以下ACL模型
-
默认情况下拒绝所有权限
-
允许每个人使用多个模型中的一些方法
-
任何授权用户都允许使用所有方法
如果我将创建多个用户并且没有人能够再创建或修改用户,这显然会起作用 . 由于我无法显式更改内置 User
模型的权限,因此我创建了一个扩展 User
的 admin
模型 . 然后我将 User
model的 public
属性设置为false . 我设置了以下ACL规则
{
"accessType": "*",
"principalType": "ROLE",
"principalId": "$everyone",
"permission": "DENY"
},
{
"accessType": "EXECUTE",
"principalType": "ROLE",
"principalId": "$everyone",
"permission": "ALLOW",
"property": "login"
},
{
"accessType": "*",
"principalType": "ROLE",
"principalId": "$authenticated",
"permission": "ALLOW"
}
正如我所看到的,它应该拒绝任何非理解用户访问 login
以外的任何方法 .
不幸的是,这不是它的工作原理,任何人仍然可以POST / users并创建新用户 . 我的猜测是ACL规则不适用于继承的模型,因此这里应用了 User
的规则 . 所以我'm back to square one, I can' t直接更改 User
权限或覆盖它们 .
我有什么选择?有没有办法阻止创建新用户?
1 回答
事实证明,规则细节比继承级别更重要 . 在这种情况下,
User
模型专门为create
属性定义规则 . 即使在扩展的admin
模型中定义了拒绝规则,此规则也优先于更一般的拒绝每个属性 . 因此,我必须从User
模型中获取所有允许的规则,并在admin
中明确拒绝它们 .