2017-04-14 28 views
0

私は/groupsREST:別のユーザー権限

単一のグループにいくつかの情報を掲載することにより、グループを作成することができます/groups

エンドポイント/groups/{id}

で読み取ることができますがありますが必要なさまざまなフィールドを持つリソースを更新します

グループ内のいくつかのフィールドを更新して、投稿することができます。/group/{id}

私は異なるフィールドを持つユーザーが別々に更新する必要がありますアクセス権は、例えば:私は、ユーザーが自分を更新することができるようにしたい

  • :グループは、私は/group/{id}/members/{id}エンドポイントの次の3つの事業を展開している例として構造

    { 
    "id": 1, 
    "name": "some name", 
    "members": [ 
        { 
        "user_id": 456, 
        "known_as": "Name 1", 
        "user": { /* some user object */}, 
        "status": "accepted", 
        "role": "admin", 
        "shared": "something" 
        }, 
        { 
        "user_id": 999227, 
        "known_as": "Name 1", 
        "user": { /* some user object */}, 
        "status": "accepted", 
        "role": "basic", 
        "shared": "something" 
        }, 
        { 
        "user_id": 9883, 
        "known_as": "Name 1", 
        "user": { /* some user object */}, 
        "status": "requested", 
        "role": "basic", 
        "shared": "something" 
        } 
    ], 
    "link": "https://some-link" 
    } 
    

    を持っているかもしれませんknown_asフィールド

  • 各メンバーのrolestatusフィールドをグループ管理者だけが更新できるようにしたい。
  • 私は、ユーザーと管理者の両方が

私のオプションは、このですsharedフィールドを更新できるようにしたい:私はすべての更新は、Aと/group/{id}/members/{id}に掲載することにより行うことができるようにする必要があります

  1. メンバーのフィールドのサブセットを削除し、更新が許可されていないフィールドを更新しようとすると不正なエラーが発生する可能性があります。
  2. また、それぞれの操作を/group/{id}/members/{id}/role,/group/{id}/members/{id}/shared/group/{id}/members/{id}/statusに分割する必要がありますか?これの問題は、私はすべてのフィールドを更新するようにたくさんの要求をする必要はないということです(私はかなりの数になると思います)。

だから明確にするために、私の質問は:それは私はあなたが許可されていないフィールドを変更しようとすると失敗することがあり、エンドポイントへの更新を投稿することができ、私のオプション1を行うには、適切なRESTを考えられていますに?私の意見で

答えて

1

あなたはオプション2は、帯域幅の浪費で言ったように、オプション1オプション2

よりもはるかに優れています。

さらに重要なことに、オプション1を使用すると、アトミック更新を簡単に実装することができます( "all-or-nothing"の更新)。正常に完了するか、完全に失敗する必要があります。部分的な更新はないはずです。

オプション2を使用すると、2つの要求が1つの操作と見なされても、一部の要求を正常に完了し、別の要求を拒否する可能性があります。

関連する問題