Как вызвать функцию, когда применяется «RP C .allow»? - PullRequest
0 голосов
/ 02 апреля 2020

В файле volttron / platform / store.py он содержит:

@ RPC.export
@ RPC.allow ('edit_config_store')
def manage_store (self, identity, config_name, raw_contents, config_type = "raw"):
    contents = process_raw_config (raw_contents, config_type)
    self._add_config_to_store (identity, config_name, raw_contents, contents, config_type,
                                  trigger_callback = True)

Чтобы вызвать эту функцию извне, я написал код как ниже.

 self.vip.rpc.call (CONFIGURATION_STORE, "manage_store", 'platform.driver', config_name, raw_contents, 'json')

Код ошибки следующий.

volttron.platform.jsonrpc.Error: method "manage_store" requires capabilities {'edit_config_store'}, but capability [] was provided for user pnp

auth зарегистрирован, как показано ниже.

INDEX: 8
{
  "domain": null,
  "address": null,
  "mechanism": "CURVE",
  "credentials": "6vjPXC8ctO8oWkeMXAOe5FsAM9vZD_sg0vkLrstnVFs",
  "groups": [],
  "roles": [],
  "capabilities": {
    "edit_config_store": {
      "identity": "pnp.b"
    }
  },
  "comments": "Automatically added on agent install",
  "user_id": "pnp.b",
  "enabled": true
}

Как исправить Capability?

Ответы [ 2 ]

0 голосов
/ 07 апреля 2020

Большое спасибо за ваш ответ.

Ссылаясь на ваш ответ, я исправлял возможности аутентификации.

    INDEX: 8
{
  "domain": null,
  "address": null,
  "mechanism": "CURVE",
  "credentials": "TG3z7cEa1FnMp_642srvNLyd6HsxTq18xMOg20FFWjE",
  "groups": [],
  "roles": [],
  "capabilities": {
    "edit_config_store": {
      "identity": "/pnp.b|platform.driver/"
    }
  },
  "comments": "Automatically added on agent install",
  "user_id": "pnp.b",
  "enabled": true
}

Тем не менее, он по-прежнему показывает, что агент не авторизован, как показано в журнале ниже.

Это моя ошибка во время исправления? Есть ли у вас какие-либо комментарии по этому поводу?

Примечание: я использую ветку volttron 7.0r c.

2020-04-07 09:09:37,467 () volttron.platform.vip.agent.subsystems.rpc ERROR: unhandled exception in JSON-RPC method 'manage_store':
Traceback (most recent call last):
  File "/volttron7_200331/volttron/platform/vip/agent/subsystems/rpc.py", line 158, in method
    return method(*args, **kwargs)
  File "/volttron7_200331/volttron/platform/vip/agent/subsystems/rpc.py", line 283, in checked_method
    raise jsonrpc.exception_from_json(jsonrpc.UNAUTHORIZED, msg)
volttron.platform.jsonrpc.Error: method "manage_store" requires capabilities {'edit_config_store'}, but capability [] was provided for user pnp
0 голосов
/ 03 апреля 2020

Это функция безопасности. По умолчанию агент может обновлять только свое собственное хранилище настроек. Таким образом, агент с идентификатором pnp.b может редактировать только свое собственное хранилище конфигурации, но не платформу .driver. Но вы (или любой, кто имеет доступ к запуску команды vctl auth или к непосредственному редактированию файла $ VOLTTRON_HOME / auth. json) можете редактировать хранилище конфигурации, предоставляя агенту pnp.b возможность редактировать хранилище конфигурации файла platform.driver.

Запись о возможностях для агента можно изменить на регулярное выражение, которое позволяет использовать pnp.b или platform.driver (или любой другой шаблон, который вы хотите). Регулярные выражения должны быть заключены в / Например

{
  "domain": null,
  "address": null,
  "mechanism": "CURVE",
  "credentials": "6vjPXC8ctO8oWkeMXAOe5FsAM9vZD_sg0vkLrstnVFs",
  "groups": [],
  "roles": [],
  "capabilities": {
    "edit_config_store": {
      "identity": "/pnp.b|platform.driver/"
    }
  },
  "comments": "Automatically added on agent install",
  "user_id": "pnp.b",
  "enabled": true
}
...