【问题标题】:Apply Access restriction to properties inside a model in loopback [Strongloop]在环回 [Strongloop] 中对模型内的属性应用访问限制
【发布时间】:2017-03-27 02:01:08
【问题描述】:

我有一个名为 employee 的模型,它的属性是

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

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

$authenticated
$everyone

我想要

1.Allow $authenticated Roles 访问模型employee[READ and WRITE]。

2.Allow $everyone Role only to [READ] 除了 location 属性 [location 只允许 ROLE $authenticated 读取的模型属性] 。 ,

我在employee.json中添加了以下配置,但是没有用。

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

搜索了很多,找不到代码。

【问题讨论】:

    标签: json node.js mongodb loopbackjs strongloop


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-02-28
        • 1970-01-01
        • 1970-01-01
        • 2014-04-20
        • 1970-01-01
        • 1970-01-01
        • 2014-12-14
        • 1970-01-01
        相关资源
        最近更新 更多