在环回中对模型内的属性应用访问限制[Strongloop]

时间:2016-11-13 07:51:00

标签: json node.js mongodb loopbackjs strongloop

我的模型名为员工,其属性为

"name":"",
"dob":"",
"location":""

环回框架中的一些默认角色是

$authenticated
$everyone

我想

1.允许$authenticated角色访问模型员工 [ READ和WRITE ]。

2.允许$everyone仅对 [READ] 的角色除位置属性之外的模型属性[仅允许ROLE $读取位置身份验证的的。 ,

我在employee.json中添加了以下配置,但确实无法正常工作。

{
      "accessType": "READ",
      "principalType": "ROLE",
      "principalId": "$everyone",
      "permission": "ALLOW"
    },
    {
      "accessType": "READ",
      "principalType": "ROLE",
      "principalId": "$everyone",
      "permission": "DENY",
      "property": "location"
    }

搜索了很多,无法找到代码。

2 个答案:

答案 0 :(得分:0)

我认为您可以在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名称),而不是模型的属性。

答案 1 :(得分:0)

下面的代码将在我的场景下编写代码,但它并不完美,它是一种解决方法,有一种名为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();
    });