私は Web API を設計していますが、それは最も基本的な段階にあります。
システム内のすべてのユーザーは、1 つ以上のロールを持つことができます。(ユーザーと管理者の例)。
API 自体はモジュールとメソッドとして設計されています。たとえば、次のメソッドを持つモジュール User があります。
ユーザー
- get_friends_of
- get_profile_pic_url
さて、私のユーザー ロール管理コードでは、これらのメソッドはそれぞれ「権利」です。これらの権利は、1 つまたは複数の役割に割り当てられます。たとえば、2 つの役割は次のようになります。
user_role = ['get_profile_pic_url'] administrator_role = ['get_profile_pic_url','get_friends_of']
したがって、ユーザーがメソッドを呼び出そうとするたびに、そのロールのいずれかがこのメソッドを権利として言及しているかどうかを確認します。はいの場合、呼び出されます。そうでない場合は呼び出されません。
これは、次の場合を除いてバターのように機能します。
通常、ユーザー X には「get_friends_of」を呼び出す権利はありませんが、自分の友達を取得しようとするときはいつでもそのメソッドを呼び出せるようにしたいと考えています。
たとえば、get_friends_of(X) は許可されますが、get_friends_of(y) は拒否されます。
私の質問は、これらのケースを設計に組み込む方法です。
当面の解決策の 1 つは、「get_my_friends」メソッドを導入することですが、API のサイズが大きくなります。さらにドキュメントを作成し、実際には「get_friends_of」の特殊なケースにすぎないことを確認する必要があります。また、ユーザーが友達の友達を見られるようにしたいという意味では拡張できません。
私の API の設計目標の 1 つは、各メソッド呼び出しが相互に排他的であることです。