KiiObject の ACL のカスタマイズ

KiiObject の ACL を設定することにより、Bucket 内の KiiObject それぞれに対するアクセス権を変更できます。

KiiObject の ACL エントリー

KiiObject の ACL エントリーに指定可能な項目は以下のとおりです。

  • アクション(アクセス制御)

    対象のユーザー/グループ/Thing が「何をできるか」を指定します。

    アクション 対象ユーザー/グループ/Thing ができること
    READ_EXISTING_OBJECT KiiObject の読み取り。
    WRITE_EXISTING_OBJECT KiiObject の更新と削除。

    注意Bucket のアクションである READ_OBJECTS_IN_BUCKET アクションを許可されているサブジェクトは、READ_EXISTING_OBJECT アクションを許可されているかどうかにかかわらず、Bucket 内の全ての KiiObject を無条件で読み取れます。動作例は ACL の変更の例 を参照してください。

  • サブジェクト(対象)

    「誰が」実行できるようになるかを指定します。

    サブジェクト 誰が実行可能か
    UserID:{USER_ID} 指定されたユーザー。
    GroupID:{GROUP_ID} 指定されたグループのメンバー。
    ThingID:{THING_ID} 指定された Thing。
    UserID:ANY_AUTHENTICATED_USER ログイン済みの全ユーザー。
    UserID:ANONYMOUS_USER 匿名ユーザー。

    ログイン済みの全ユーザーと匿名ユーザーの定義については、サブジェクト をご覧ください。

これらのアクションとサブジェクトを使って、「どの KiiObject の」アクセス許可を変更するかを以下の URL で指定します。

  • アプリケーションスコープ

    https://api-jp.kii.com/api/apps/{APP_ID}/buckets/{BUCKET_ID}/objects/{OBJECT_ID}/acl/ {ACTION}/{SUBJECT}
    KiiObject 作成者のアクセストークンが必要

  • グループスコープ

    https://api-jp.kii.com/api/apps/{APP_ID}/groups/{GROUP_ID}/buckets/{BUCKET_ID}/objects/ {OBJECT_ID}/acl/{ACTION}/{SUBJECT}
    KiiObject 作成者、または、グループオーナーのアクセストークンが必要

  • ユーザースコープ

    https://api-jp.kii.com/api/apps/{APP_ID}/users/{USER_ID}/buckets/{BUCKET_ID}/objects/ {OBJECT_ID}/acl/{ACTION}/{SUBJECT}
    https://api-jp.kii.com/api/apps/{APP_ID}/users/me/buckets/{BUCKET_ID}/objects/ {OBJECT_ID}/acl/{ACTION}/{SUBJECT}
    KiiObject 作成者、または、スコープオーナーのアクセストークンが必要

  • Thing スコープ

    https://api-jp.kii.com/api/apps/{APP_ID}/things/VENDOR_THING_ID:{VENDOR_THING_ID}/ buckets/{BUCKET_ID}/objects/{OBJECT_ID}/acl/{ACTION}/{SUBJECT}
    https://api-jp.kii.com/api/apps/{APP_ID}/things/{THING_ID}/buckets/{BUCKET_ID}/objects/ {OBJECT_ID}/acl/{ACTION}/{SUBJECT}
    KiiObject 作成者、Thing、または、Thing オーナーのアクセストークンが必要

KiiObject の ACL の管理

KiiObject の ACL にエントリーを追加または削除できます。ACL エントリーの一覧を取得することもできます。

KiiObject に ACL エントリーを追加する

さまざまなサブジェクトに対して READ_EXISTING_OBJECT アクションを許可する例を以下に挙げます。

ANONYMOUS_USER(匿名ユーザー)に READ_EXISTING_OBJECT アクションを許可する

curl -v -X PUT \
  -H "Authorization: Bearer {ACCESS_TOKEN}" \
  "https://api-jp.kii.com/api/apps/{APP_ID}/users/{USER_ID}/buckets/{BUCKET_ID}/objects/{OBJECT_ID}/acl/READ_EXISTING_OBJECT/UserID:ANONYMOUS_USER"

ANY_AUTHENTICATED_USER(ログイン済みの全ユーザー)に READ_EXISTING_OBJECT アクションを許可する

curl -v -X PUT \
  -H "Authorization: Bearer {ACCESS_TOKEN}" \
  "https://api-jp.kii.com/api/apps/{APP_ID}/users/{USER_ID}/buckets/{BUCKET_ID}/objects/{OBJECT_ID}/acl/READ_EXISTING_OBJECT/UserID:ANY_AUTHENTICATED_USER"

あるグループに READ_EXISTING_OBJECT アクションを許可する

curl -v -X PUT \
  -H "Authorization: Bearer {ACCESS_TOKEN}" \
  "https://api-jp.kii.com/api/apps/{APP_ID}/users/{USER_ID}/buckets/{BUCKET_ID}/objects/{OBJECT_ID}/acl/READ_EXISTING_OBJECT/GroupID:{GROUP_ID}"

あるユーザーに READ_EXISTING_OBJECT アクションを許可する

curl -v -X PUT \
  -H "Authorization: Bearer {ACCESS_TOKEN}" \
  "https://api-jp.kii.com/api/apps/{APP_ID}/users/{USER_ID}/buckets/{BUCKET_ID}/objects/{OBJECT_ID}/acl/READ_EXISTING_OBJECT/UserID:{USER_ID}"

ある Thing に READ_EXISTING_OBJECT アクションを許可する

curl -v -X PUT \
  -H "Authorization: Bearer {ACCESS_TOKEN}" \
  "https://api-jp.kii.com/api/apps/{APP_ID}/users/{USER_ID}/buckets/{BUCKET_ID}/objects/{OBJECT_ID}/acl/READ_EXISTING_OBJECT/ThingID:{THING_ID}"

KiiObject の ACL エントリーを削除する

一旦許可したアクションを取り消すには、対応する ACL エントリーの DELETE リクエストを送信します。

この例では、ANONYMOUS_USER(匿名ユーザー)に許可した WRITE_EXISTING_OBJECT アクションの ACL エントリーを削除しています。

curl -v -X DELETE \
  -H "Authorization: Bearer {ACCESS_TOKEN}" \
  "https://api-jp.kii.com/api/apps/{APP_ID}/users/{USER_ID}/buckets/{BUCKET_ID}/objects/{OBJECT_ID}/acl/WRITE_EXISTING_OBJECT/UserID:ANONYMOUS_USER"

初めに示した URL によって、その他のスコープも操作できます。

KiiObject の ACL を取得する

KiiObject に設定されている ACL を取得するには、対応する URL からアクションやサブジェクトを省略した形で GET リクエストを送信します。

たとえば、WRITE_EXISTING_OBJECT アクションを許可されているサブジェクトの一覧は以下のようにして取得できます。

curl -v -X GET \
  -H "Authorization: Bearer {ACCESS_TOKEN}" \
  "https://api-jp.kii.com/api/apps/{APP_ID}/users/{USER_ID}/buckets/{BUCKET_ID}/objects/{OBJECT_ID}/acl/WRITE_EXISTING_OBJECT"

また、該当 KiiObject の ACL 全体は、以下のように取得できます。

curl -v -X GET \
  -H "Authorization: Bearer {ACCESS_TOKEN}" \
  "https://api-jp.kii.com/api/apps/{APP_ID}/users/{USER_ID}/buckets/{BUCKET_ID}/objects/{OBJECT_ID}/acl"

いずれの例もユーザースコープの KiiObject を指定していますが、初めに示した URL によって、その他のスコープも操作できます。

期待どおりに動作しない場合

ACL エントリーを削除できない

KiiObject 作成者やスコープオーナーにデフォルトで許可されるアクションの ACL エントリーは削除できません。詳細は スコープオーナーや作成者の ACL エントリーは削除できません をご覧ください。