1. セキュリティ フェーズのスクリプト

アクション スクリプトの例 (セキュリティ フェーズ)

Version:
日本語翻訳に関する免責事項

このページの翻訳はAIによって自動的に行われました。可能な限り正確な翻訳を心掛けていますが、原文と異なる表現や解釈が含まれる場合があります。正確で公式な情報については、必ず英語の原文をご参照ください。

以下に、セキュリティ フェーズ (処理中) のトリガーによって実行されるアクション スクリプトの例を示します。このスクリプトは、Web タイプのアセットを作成または変更しようとしているユーザーが正しいセキュリティ グループに属しているかどうかを検証します。

ユース ケース

  1. ユーザーがアセットを作成または変更します。
  2. アセット タイプが Web の場合、このユーザーが Web エージェンシー ユーザー ユーザー グループ (この例のために作成されたユーザー グループ) に属しているかどうかがスクリプトによってチェックされます。
  3. ユーザーが正しいユーザー グループに属していない場合は、例外がスローされます。

前提条件

Web は、M.AssetType の既定のタイプではありません。必要に応じて作成する必要があります。

  • [管理] に移動して [タクソノミー] を選択します。

  • [M.Asset] を検索します。

    タクソノミー上の M.AssetType

  • [+] をクリックして、M.AssetType タクソノミーに新しいクラスを追加します。

    M.AssetType タクソノミーに新しいクラスを追加します。

  • 新しいアイテムのラベルとして「Web」と入力します。

    M.AssetType タクソノミーの新しいクラスとして Web を追加する

  • [保存] をクリックして、新しいアセット タイプの WebM.AssetType タクソノミーに追加します。

スクリプト

var loadConfig = new EntityLoadConfiguration
{
CultureLoadOption = CultureLoadOption.None,
RelationLoadOption = new RelationLoadOption("UserGroupToUser"),
PropertyLoadOption = PropertyLoadOption.None
};

var user = await MClient.Entities.GetAsync(Context.TriggeringUserId.Value, loadConfig);
if (user == null) throw new InvalidOperationException("Triggering user could not be found.");

var webAgencyGroup = await MClient.Users.GetUserGroupAsync("Web agency users");
if (webAgencyGroup == null) throw new InvalidOperationException("Web agency usergroup not found.");

var userGroups = await user.GetRelationAsync<IChildToManyParentsRelation>("UserGroupToUser");

if (!userGroups.Parents.Contains(webAgencyGroup.Id.Value))
{
throw new ForbiddenException("Only users of usergroup 'Web agency users' are allowed to create or modify assets of image-type 'Web'.");
}

スクリプトの説明

  1. このエンティティとともに読み込むプロパティを指定する EntityLoadConfiguration オブジェクトを作成します。

    var loadConfig = new EntityLoadConfiguration
    {
    CultureLoadOption = CultureLoadOption.None,
    RelationLoadOption = new RelationLoadOption("UserGroupToUser"),
    PropertyLoadOption = PropertyLoadOption.None
    };
    注意

    この例では、読み込む必要があるリレーションは UserGroupToUser だけです。このリレーションは、ユーザーが属するグループを指定します。

  2. ユーザー ID (Context.TriggeringUserId.Value) と読み込み設定を指定して user エンティティを取得します。

    var user = await MClient.Entities.GetAsync(Context.TriggeringUserId.Value, loadConfig);
    注意

    MClient オブジェクトは常に使用可能であり、すべてのスクリプト タイプで使用できます。MClient の詳細については、「SDK API リファレンス ガイド」(MClient) を参照してください。

    Entities (MClientIEntitiesClient 型のプロパティ) の GetAsync メソッドは、エンティティの ID と読み込み設定オブジェクト (オプション引数) を受け取ってエンティティ オブジェクトを返します。

  3. ユーザー オブジェクトが返されなかった場合は、InvalidOperationException をスローします。

    if (user == null) throw new InvalidOperationException("Triggering user could not be found.");
  4. ユーザー グループを取得します。

    var webAgencyGroup = await MClient.Users.GetUserGroupAsync("Web agency users");
    注意

    MClient オブジェクトは常に使用可能であり、すべてのスクリプト タイプで使用できます。MClient の詳細については、「SDK API リファレンス ガイド」(MClient) を参照してください。

  5. ユーザー グループが見つからない場合は、InvalidOperationException をスローします。

    if (webAgencyGroup == null) throw new InvalidOperationException("Web agency usergroup not found.");
  6. ユーザーのユーザー グループを取得します。

    var userGroups = await user.GetRelationAsync<IChildToManyParentsRelation>("UserGroupToUser");
    警告

    GetRelationAsync を使用してリレーション オブジェクトを取得するには、リレーションのタイプを指定する必要があります。この例では、これは IChildToManyParentsRelation です。リレーションのタイプの詳細については、「SDK API リファレンス ガイド」(Stylelabs.M.Sdk.Contracts.Base) を参照してください。

  7. ユーザー グループに「Web エージェンシー ユーザー」グループが含まれていない場合は、ForbiddenException をスローします。

    if (!userGroups.Parents.Contains(webAgencyGroup.Id.Value))
    {
    throw new ForbiddenException("Only users of usergroup 'Web agency users' are allowed to create or modify assets of image-type 'Web'.");
    }
    注意

    ForbiddenException の詳細、および使用可能なカスタム例外の一覧については、「SDK API リファレンス ガイド」(Stylelabs.M.Sdk.Exceptions) を参照してください。

セットアップ

  1. アクション スクリプトを作成し、パブリッシュして有効にします。

  2. アクション スクリプト タイプのアクションを作成し、上記で作成したスクリプトにリンクします。

  3. 新しいトリガーを作成し、トリガーの目的をエンティティの作成エンティティの変更に設定します。

    • トリガー条件で、エンティティ定義としてアセットを追加した後、新しい条件を追加します。条件を「タイプ (AssetTypeToAsset) の現在の値に任意の Web が含まれる」に設定します。
    • トリガー アクションで、[セキュリティ アクション] の下にこのアクションを追加します。
  4. トリガーを保存して有効にします。

この記事を改善するための提案がある場合は、 お知らせください!