我已经从MyModel
模型添加了模型User
和扩展客户端模型。我已经设置了MyModel
和Client
之间的关系。客户端可以拥有多个MyModel,而每个MyModel都属于一个客户端。
在Client.json中
...
"relations": {
"myModels": {
"type": "hasMany",
"model": "MyModel",
"foreignKey": "createdBy"
}
}
...
在MyModel.json
中...
"relations": {
"client": {
"type": "belongsTo",
"model": "Client",
"foreignKey": "createdBy"
}
},
...
设置关系后,我得到一个端点,如/ clients /:id / myModels等。即使未对用户进行身份验证,也会加载与客户端相关的MyModel
。
现在我已按照以下方式设置ACL, 在MyModel.json中,
...
"acls": [
{
"accessType": "*",
"principalType": "ROLE",
"principalId": "$unauthenticated",
"permission": "DENY"
}
],
...
在尝试获取与客户端相关的MyModel
列表时,不会应用身份验证检查。即使用户未经过身份验证,也会检索MyModel
列表。
我认为我需要添加ACL
来限制未经身份验证的用户访问相关模型。所以我尝试在Client.json
ACL
...
"acls": [
{
"accessType": "*",
"principalType": "ROLE",
"principalId": "$unauthenticated",
"permission": "DENY",
"property":"__get__myModels"
}
]
...
但它并没有改变任何事情。
但是,如果经过身份验证的用户尝试路由/client/:id/mymodels/count
,则会显示Unauthorized User
错误。
解决这个问题需要做些什么?
答案 0 :(得分:0)
如果您使用Role和RoleMapping的动态方式,可以尝试这样做。 职责:
{
"name" : "admin",
"description" : "admin role",
"created" : "2018-02-23T15:48:40.514+0000",
"modified" : ISODate("2018-02-23T15:48:40.514+0000")
}
RoleMapping:
{
"principalId" : ObjectId("5b06825775abbd45b3f02719"),
"roleId" : ObjectId("5a903836876b6f0bbaa64c40"),
"principalType" : "USER",
"created_by" : "user",
"created_at" : ISODate("2018-05-24T09:13:59.352+0000")
}
和ACL:
{
"model" : "YourModel",
"property": 'find',
"accessType": '*',
"principalType": 'ROLE',
"principalId": 'admin', // depends on role name
"permission": 'ALLOW'
}
以及其他属性以及findOne,deleteById等。
对于所有未经认证的人:
{
"model" : "YourModel",
"property" : "find",
"accessType" : "*",
"permission" : "DENY",
"principalType" : "ROLE",
"principalId" : "$everyone"
}
对于特定用户
{
"model" : "YourModel",
"property" : "find",
"accessType" : "*",
"permission" : "ALLOW",
"principalType" : "ROLE",
"principalId" : "5a817425e09bdb38f9217c20", // user doc id
}