役割と権限

ユーザー役割はmindzieStudio内のアクセスレベルと機能を定義します。各ユーザーには1つの役割が割り当てられ、その役割に基づいてプラットフォーム全体の権限が決まります。

APIにroleName値を送信する際は、以下のAPI役割名の列に示された正確な文字列を使用してください。

利用可能な役割

役割(表示名) API役割名 範囲 説明
サーバー管理者 TenantAdmin システム 最上位権限。全テナントおよびサーバー全体に及ぶ完全なアクセス。
管理者 Administrator テナント テナント内の完全な管理権限。
IT管理者 ITAdmin テナント 連携、接続、グローバルAPIキーの管理。
アナリスト Analyst プロジェクト 分析、ダッシュボード、調査の作成と管理。
開発者 Developer プロジェクト 連携開発、アクションとアプリ管理、例外詳細の閲覧。
ユーザー User 読み取り専用 ダッシュボードと分析の閲覧。内容変更不可。

命名に関する注意. APIの役割名TenantAdminはmindzieStudioにおいて最高権限の役割です — 名前にかかわらず、全テナントおよびサーバー全体へのアクセスを持ちます(すべてのテナントの管理、すべてのユーザーの管理、サーバー管理)。わかりやすくするためにこのページではサーバー管理者とも呼んでいます。API経由で役割を割り当てる際はTenantAdminを送信してください。


役割詳細

サーバー管理者 (TenantAdmin)

mindzieStudioでの最上位権限レベル。

機能:

  • 全テナントとプロジェクトへのアクセスと管理
  • テナントの作成、変更、削除
  • システム全体のすべてのユーザー管理
  • サーバー管理エリアの開放(サーバーメモリ、バックアップ、実行管理)
  • サポートやテストのための他の役割のなりすまし
  • グローバルAPIキーの作成
  • すべての他の役割の機能を含む

利用例:

  • プラットフォーム所有者
  • 運用管理者

管理者

サーバー全体の権限はなく、テナント内での完全な管理権限を持つ。

機能:

  • テナント内ユーザーの管理(作成、編集、無効化、パスワードリセット)
  • テナント内の役割付与
  • 分析テンプレートの管理
  • テナント内のすべてのプロジェクト、ダッシュボード、データセット、調査、アプリ管理
  • テナントAPIキーの作成
  • テナントの作成や削除は不可
  • サーバー管理エリアのアクセスは不可

利用例:

  • 部門責任者
  • 自身のテナントを運営する顧客管理者

IT管理者 (ITAdmin)

連携やデータ基盤に特化した技術設定権限。

機能:

  • 連携、接続、データソースの設定
  • データおよびETL処理の管理
  • グローバルAPIキーの作成
  • 制限された作成権限 — ダッシュボードや分析の構築は行わない

利用例:

  • 元システム接続を担当するITスタッフ
  • 認証情報やETLを管理する運用者

アナリスト

プロセスマイニング分析の標準ユーザーロール。

機能:

  • 調査やノートブックの作成・管理
  • データセットのアップロードと設定
  • ダッシュボードおよびレポートの作成
  • ノートブックとブロックの実行
  • アクションおよびアプリの管理
  • 分析結果のエクスポート

利用例:

  • プロセスアナリスト
  • データサイエンティスト
  • ビジネスアナリスト

開発者

開発ツールとAPIへのアクセス権。

機能:

  • 開発ツールやプラットフォームAPIの使用
  • カスタム連携・拡張機能の構築
  • アクションとアプリの管理
  • デバッグのための例外詳細閲覧
  • 分析およびダッシュボードの作成と管理

利用例:

  • 連携構築エンジニア
  • 自動化やAPI利用者

ユーザー

ダッシュボードと分析を利用する読み取り専用アクセス。

機能:

  • 共有ダッシュボードの閲覧
  • 公開された分析の閲覧
  • アラートの閲覧
  • 表示中のデータのエクスポート
  • 内容の変更は不可

利用例:

  • 経営層
  • ステークホルダー
  • 外部レビュアー

役割階層

サーバー管理者  (TenantAdmin)
    |
    +-- 管理者
            |
            +-- アナリスト、開発者、IT管理者
                    |
                    +-- ユーザー

TenantAdminは最も広範囲(全テナント、サーバー管理)に及びます。Administratorは自身のテナント内で完全な権限を持ちます。その他の役割はプロジェクトレベルか読み取り専用の範囲に限定されます。


サービスアカウント

サービスアカウントはAPI連携や自動化ワークフロー用に設計された特別なユーザーアカウントです。

要件

  • 対象はサーバー管理者(TenantAdmin)および管理者のみ
  • サービスアカウントにはホームテナントが割り当てられている必要がある
  • API経由でユーザーログインなしに認証可能

設定方法

ユーザーをサービスアカウントに昇格するには:

{
  "isServiceAccount": true,
  "homeTenantId": "12345678-1234-1234-1234-123456789012"
}

通常ユーザーへ降格するには:

{
  "isServiceAccount": false
}

降格時にhomeTenantIdは自動的にクリアされます。

利用例

  • CI/CDパイプライン連携
  • 自動データインポートスクリプト
  • 定期レポート生成
  • ETL処理
  • 監視およびアラートシステム

役割割り当て

ユーザー作成時

作成リクエストに役割を指定:

{
  "email": "john.smith@example.com",
  "displayName": "John Smith",
  "roleName": "Analyst"
}

ユーザー更新時

更新リクエストで役割を変更:

{
  "roleName": "TenantAdmin"
}

表に記載されたAPI役割名(TenantAdminAdministratorITAdminAnalystDeveloperUser)を正確に送信してください。


APIキーの種類と役割

APIキー種類 作成可能な役割 アクセス範囲
グローバルAPIキー サーバー管理者 (TenantAdmin)、IT管理者 (ITAdmin) 全テナント、全エンドポイント
テナントAPIキー サーバー管理者 (TenantAdmin)、管理者、開発者 単一テナント内のみ

グローバルAPIキー用エンドポイント

グローバルAPIキーのみアクセス可能:

  • /api/user - グローバルユーザー管理
  • /api/tenant - テナント管理
  • 複数テナントにまたがる操作

テナントAPIキー用エンドポイント

テナントAPIキーはアクセス可能:

  • /api/tenant/{tenantId}/user - テナントユーザー管理
  • /api/{tenantId}/project - プロジェクト操作
  • /api/{tenantId}/dataset - データセット操作
  • その他のテナントスコープエンドポイント全般

ベストプラクティス

最小権限の原則

各ユーザーの職務に最低限必要な役割を割り当てる。

ダッシュボードを閲覧する経営層        -> ユーザー
調査を実行するアナリスト             -> アナリスト
テナントを管理するチームリーダー     -> 管理者
全テナントを管理する運用担当者       -> サーバー管理者 (TenantAdmin)

サービスアカウントのセキュリティ

  • 連携ごとに専用のサービスアカウントを作成する
  • 説明的な表示名を使う(例:「CI/CDパイプラインサービス」)
  • 定期的にAPIキーをローテーションする
  • サービスアカウントのアクティビティを監視する

役割変更時の注意点

  • 昇格時には新たな責任を理解しているか確認
  • 降格時には作業の遂行に支障がないか確認
  • 監査目的で役割変更を記録しておく

無効化と削除の使い分け

  • 監査ログを保持するため削除より無効化を推奨
  • 無効化されたユーザーはログイン不可だが履歴は保持される
  • データプライバシー上必要な場合のみ削除する

実装例

Python

import requests

BASE_URL = 'https://your-mindzie-instance.com'

class RoleManager:
    def __init__(self, global_api_key):
        self.headers = {
            'Authorization': f'Bearer {global_api_key}',
            'Content-Type': 'application/json'
        }

    def get_users_by_role(self, role_name):
        """特定の役割を持つ全ユーザーを取得します。"""
        url = f'{BASE_URL}/api/user'
        params = {'role': role_name, 'pageSize': 1000}
        response = requests.get(url, headers=self.headers, params=params)
        response.raise_for_status()
        return response.json()

    def promote_to_service_account(self, user_id, home_tenant_id):
        """ユーザーをサービスアカウントに昇格させます。"""
        url = f'{BASE_URL}/api/user/{user_id}'
        payload = {
            'isServiceAccount': True,
            'homeTenantId': home_tenant_id
        }
        response = requests.put(url, json=payload, headers=self.headers)
        response.raise_for_status()
        return response.json()

    def demote_from_service_account(self, user_id):
        """サービスアカウントを通常ユーザーに降格させます。"""
        url = f'{BASE_URL}/api/user/{user_id}'
        payload = {'isServiceAccount': False}
        response = requests.put(url, json=payload, headers=self.headers)
        response.raise_for_status()
        return response.json()

    def change_role(self, user_id, new_role):
        """ユーザーの役割を変更します。API役割名を使用してください:TenantAdmin, Administrator, ITAdmin, Analyst, Developer, User。"""
        url = f'{BASE_URL}/api/user/{user_id}'
        payload = {'roleName': new_role}
        response = requests.put(url, json=payload, headers=self.headers)
        response.raise_for_status()
        return response.json()

    def disable_user(self, user_id):
        """ユーザーアカウントを無効化します。"""
        url = f'{BASE_URL}/api/user/{user_id}'
        payload = {'disabled': True}
        response = requests.put(url, json=payload, headers=self.headers)
        response.raise_for_status()
        return response.json()

# 使用例
manager = RoleManager('your-global-api-key')

# すべてのサーバー管理者(TenantAdmin役割)を一覧表示
server_admins = manager.get_users_by_role('TenantAdmin')
print(f"システムにサーバー管理者が{server_admins['totalCount']}名います")

# ユーザーをサービスアカウントに昇格
manager.promote_to_service_account(
    user_id='a1b2c3d4-e5f6-7890-abcd-ef1234567890',
    home_tenant_id='12345678-1234-1234-1234-123456789012'
)

# アナリストをサーバー管理者に昇格
manager.change_role(
    user_id='a1b2c3d4-e5f6-7890-abcd-ef1234567890',
    new_role='TenantAdmin'
)

# ユーザー削除の代わりに無効化
manager.disable_user('departing-user-id')

JavaScript

class RoleManager {
  constructor(globalApiKey) {
    this.headers = {
      'Authorization': `Bearer ${globalApiKey}`,
      'Content-Type': 'application/json'
    };
  }

  async getUsersByRole(roleName) {
    const url = `${BASE_URL}/api/user?role=${roleName}&pageSize=1000`;
    const response = await fetch(url, { headers: this.headers });
    return await response.json();
  }

  async promoteToServiceAccount(userId, homeTenantId) {
    const url = `${BASE_URL}/api/user/${userId}`;
    const response = await fetch(url, {
      method: 'PUT',
      headers: this.headers,
      body: JSON.stringify({
        isServiceAccount: true,
        homeTenantId
      })
    });
    return await response.json();
  }

  async changeRole(userId, newRole) {
    // API役割名を使用してください: TenantAdmin, Administrator, ITAdmin, Analyst, Developer, User
    const url = `${BASE_URL}/api/user/${userId}`;
    const response = await fetch(url, {
      method: 'PUT',
      headers: this.headers,
      body: JSON.stringify({ roleName: newRole })
    });
    return await response.json();
  }
}

// 使用例
const manager = new RoleManager('your-global-api-key');

// すべてのアナリストを取得
const analysts = await manager.getUsersByRole('Analyst');
console.log(`システムにアナリストは${analysts.totalCount}名います`);

// サーバー管理者に昇格
await manager.changeRole('user-id', 'TenantAdmin');