在环回 [Strongloop] 中对模型内的属性应用访问限制
Apply Access restriction to properties inside a model in loopback [Strongloop]
我有一个名为 employee 的模型,它的属性是
"name":"",
"dob":"",
"location":""
环回框架中的一些默认角色是
$authenticated
$everyone
我想
1.Allow $authenticated
访问模型的角色 employee[READ and WRITE].
2.Allow $everyone
作用仅对 [READ] 除了 location 属性 的模型属性] [位置仅允许 ROLE $authenticated] 读取。 ,
我在 employee.json 中添加了以下配置,但是没有用。
{
"accessType": "READ",
"principalType": "ROLE",
"principalId": "$everyone",
"permission": "ALLOW"
},
{
"accessType": "READ",
"principalType": "ROLE",
"principalId": "$everyone",
"permission": "DENY",
"property": "location"
}
搜索了很多,找不到代码。
我认为您可以在 employee.json
:
中针对问题 1) 做些什么
...
"acls": [
{
"accessType": "*",
"principalType": "ROLE",
"principalId": "$everyone",
"permission": "DENY"
},
{
"accessType": "READ",
"principalType": "ROLE",
"principalId": "$authenticated",
"permission": "ALLOW"
},
{
"accessType": "WRITE",
"principalType": "ROLE",
"principalId": "$authenticated",
"permission": "ALLOW"
}
]
…
关于问题 2) - 我认为这实际上在 LoopbackJS 中是不可能的(不确定)。
property
属性用于访问您将在 employee.js
文件中定义的自定义方法(remoteMethods 名称)——不适用于模型的属性。
下面的代码将在我的场景下工作,但它并不完美,它是一种解决方法,我猜有一些称为 mixins 的方法可以完成这些任务。由于我的问题没有得到回答,我正在提供解决方案。
Employee.afterRemote('**', function(ctx, result, next) {
if(ctx.result) {
if(Array.isArray(ctx.result)) {
ctx.result.forEach(function (result) {
var is_logged_in = ctx.req.accessToken;
if(is_logged_in == null){
console.log('1');
result.unsetAttribute('location')
}
});
} else {
ctx.result.unsetAttribute('location')
}
}
next();
});
我有一个名为 employee 的模型,它的属性是
"name":"",
"dob":"",
"location":""
环回框架中的一些默认角色是
$authenticated
$everyone
我想
1.Allow $authenticated
访问模型的角色 employee[READ and WRITE].
2.Allow $everyone
作用仅对 [READ] 除了 location 属性 的模型属性] [位置仅允许 ROLE $authenticated] 读取。 ,
我在 employee.json 中添加了以下配置,但是没有用。
{
"accessType": "READ",
"principalType": "ROLE",
"principalId": "$everyone",
"permission": "ALLOW"
},
{
"accessType": "READ",
"principalType": "ROLE",
"principalId": "$everyone",
"permission": "DENY",
"property": "location"
}
搜索了很多,找不到代码。
我认为您可以在 employee.json
:
...
"acls": [
{
"accessType": "*",
"principalType": "ROLE",
"principalId": "$everyone",
"permission": "DENY"
},
{
"accessType": "READ",
"principalType": "ROLE",
"principalId": "$authenticated",
"permission": "ALLOW"
},
{
"accessType": "WRITE",
"principalType": "ROLE",
"principalId": "$authenticated",
"permission": "ALLOW"
}
]
…
关于问题 2) - 我认为这实际上在 LoopbackJS 中是不可能的(不确定)。
property
属性用于访问您将在 employee.js
文件中定义的自定义方法(remoteMethods 名称)——不适用于模型的属性。
下面的代码将在我的场景下工作,但它并不完美,它是一种解决方法,我猜有一些称为 mixins 的方法可以完成这些任务。由于我的问题没有得到回答,我正在提供解决方案。
Employee.afterRemote('**', function(ctx, result, next) {
if(ctx.result) {
if(Array.isArray(ctx.result)) {
ctx.result.forEach(function (result) {
var is_logged_in = ctx.req.accessToken;
if(is_logged_in == null){
console.log('1');
result.unsetAttribute('location')
}
});
} else {
ctx.result.unsetAttribute('location')
}
}
next();
});