Skip to content

Разрешения

Счеты нуждаются в знаках разрешения для различных действий на блокчейне, например, для заготовки или сжигания активов.

Существует разница между публичным и частным блокчейнами в отношении разрешений, предоставленных пользователям. В частном блокчейн большинство учетных записей, как предполагается, не могут делать ничего за пределами предоставленного им полномочия, если не будет прямое разрешение на это.

Получение разрешения на что-то означает, что учетная запись имеет соответствующий Permission. Разрешения могут быть предоставлены непосредственно или через Role, Разрешения предоставляются с помощью: Grant Разрешения и роли не истекают; удалить их с помощью Revoke Инструкция.

Токены разрешения

Токены разрешения - это типные объекты, определенные активным исполнителем. Некоторые токены являются глобальными, такие как CanManagePeers, а другие предназначены для конкретного объекта реестра, такого как учетная запись, актив, определение актива, домен, NFT, роль или триггер.

Вот некоторые примеры параметров, используемых для различных токенов разрешения:

  • Токен, который дает разрешение на изменение метаданных для конкретной учетной записи, имеет поле account:

    json
    {
      "account": "<AccountId>"
    }
  • Токен, выдающий разрешение на передачу активов для определения конкретного актива, имеет поле asset_definition:

    json
    {
      "asset_definition": "<AssetDefinitionId>"
    }
  • Мировой токен, такой как CanManagePeers, не имеет полей:

    json
    {}

Заранее настроенные токены разрешения

Список заранее настроенных токенов разрешения можно найти в главе Reference.

Группы разрешений (роли)

Набор разрешений называется ролью. Подобно токену разрешения, роли могут быть предоставлены с помощью инструкции Grant и отменены с помощью указания Revoke.

Прежде чем предоставлять роль счету, должна быть зарегистрирована роль.

Роли полезны, когда несколько учетных записей должны получить один и тот же набор разрешений. Зарегистрировать роль один раз, предоставить разрешения на роль, а затем предоставить или отозвать роль для отдельных счетов.

Зарегистрируйтесь в новой должности

Давайте зарегистрируем новую роль, которая при предоставлении позволит другому счету получить доступ к метаданным в аккаунте Мыши:

rust
let role_id = RoleId::from_str("ACCESS_TO_MOUSE_METADATA")?;
let role = iroha_data_model::role::Role::new(role_id.clone(), mouse_id.clone())
    .add_permission(CanModifyAccountMetadata {
        account: mouse_id.clone(),
    });
let register_role = Register::role(role);

Дайте роль

После того, как роль будет зарегистрирована, Мыша может предоставить ее Алисе:

rust
let grant_role = Grant::account_role(role_id, alice_id);
let grant_role_tx = TransactionBuilder::new(chain_id, mouse_id)
    .with_instructions([grant_role])
    .sign(mouse_private_key);

Валидаторы разрешений

Разрешения существуют таким образом, что только учетные записи с необходимым токеном разрешений могут выполнять защищенное действие. По умолчанию исполнитель проверяет разрешения во время выполнения инструкций, запросов и выражений.

Поверхность валидатора по умолчанию группируется по регистровой зоне:

  • Управление сверстниками
  • домены и учетные записи
  • активы, NFTs, а также депозиты
  • триггеры
  • роли и разрешения
  • Исполнитель/время выполнения, пробы, мосты и модули SORA/Nexus

Точный список токенов подтвержден источником в ссылке Permission Tokens.

Валидаторы времени запуска

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

Подтвердители возвращают вердикт. Валидатор может разрешить операцию, отрицать ее по причине или пропустить ее, если операция находится вне сферы действия этого валидатора. Избранный судья объединяет эти приговоры, чтобы решить, можно ли продолжать слушание, задавать вопросы или высказывать свое мнение.

Поддерживаемые запросы

Разрешения и роли могут быть запрошены.

Запросы по ролям:

Запросы на знаки разрешения: