Как ограничить доступ к свойству модели в петле - PullRequest
0 голосов
/ 30 октября 2019

В настоящее время я занимаюсь контролем доступа к моему API loopback3 (3.26.0) и пытаюсь ограничить доступ к свойству для всех, кроме владельца.

Допустим, у меня есть отношение Пользователь -> Атлет. С Атлетом, имеющим "secretProperty".

Я установил secretProperty в защищенное состояние, и у меня есть

Athlete.afterRemote('**', function(ctx, modelInstance, next) { // i am restricting property access here, which works for direct .find()}

Как описано здесь

Но я все ещеу меня проблема в том, что когда я запрашиваю

GET /user/{id}/athlete

, возвращаемые данные содержат мой secretProperty, и мой хук никогда не вызывается

Как мне ограничить доступ к свойству через все конечные точки? (в основном это скрытое значение, но не для определенных ролей / пользователей)

Вот определения моей модели: athlete.json

{
  "name": "athlete",
  "plural": "athletes",
  "base": "PersistedModel",
  "idInjection": true,
  "options": {
    "validateUpsert": true
  },
  "properties": {
    "name": {
      "type": "string",
      "required": false,
      "default": ""
    },
    "mySecretProperty": {
      "type": "number",
      "required": false,
      "default": 0
    }
  },
  "relations": {
    "user": {
      "type": "belongsTo",
      "model": "user",
      "foreignKey": ""
    }
  }
}

user.json

{
    "name": "user",
    "plural": "users",
    "base": "User",
    "idInjection": true,
    "options": {
        "validateUpsert": true
    },
    "validations": [],
    "relations": {
        "athlete": {
            "type": "hasOne",
            "model": "athlete",
            "foreignKey": ""
        }
    }
}

Ответы [ 2 ]

0 голосов
/ 14 ноября 2019

Loopback не обеспечивает безопасность на уровне свойств, только безопасность на уровне модели. Чтобы обеспечить безопасность на уровне свойств, мы сделали следующее:

  1. Пометить свойство как защищенное
  2. Создать пользовательскую конечную точку, в которой пользователи могли бы обновлять защищенное свойство
  3. Ограниченный доступ к пользовательской конечной точке (2) для пользователей или ролей, которые могут получить доступ к свойству.

Другой вариант - использовать хук "перед сохранением", проверить пользователя и свойства длябыть обновленным.

Можно сказать, что это ручная задача, которую вы должны кодировать самостоятельно, поскольку она не является встроенной обратной связью

0 голосов
/ 31 октября 2019

Попробуйте добавить свойство к модели спортсмена: "protected": ["mySecretProperty"], и у вас будет установленная связь между моделями, но не задано, в каких полях оно должно выполняться, поэтому оно не будет работать.

https://loopback.io/doc/en/lb3/Model-definition-JSON-file.html#protected-properties

...