はい、私もservice-configのアイデアが好きではありません、あなたを責めないでください。
フレックス側に関しては、心配する必要があるのは、もちろんロールやユーザーではなく、権限を定義することだけです。
適切な形式の役割ベースのセキュリティには、ユーザー、役割、および権限の定義が含まれます。あなたはおそらくこれを知っていますが、とにかく質問でそれを大声で言うのは良いことです。
- ユーザーには1つ以上の役割が割り当てられます
- ロールには1つ以上の権限が割り当てられます
- アクセス許可の安全な機能
したがって、アプリケーションでは、特定のアクセス許可(セキュリティに依存するアプリの一部)を定義します。表示/非表示/実行可能または実行不可など。通常、これを行う方法は文字列定数を使用することです。したがって、注文管理の状況では、、、、、がありCanCreateOrder
ます。CanViewOrder
CanCancelOrder
CanFlagOrder
サーバー側では、役割はこれらの権限に関連付けられます。まあ言ってみれば:
- 管理者はすべてを行うことができます
- CustomerServiceは、表示とフラグ付けを行うことができます
- 顧客は見ることができます
したがって、サーバー側では、管理者であるユーザーAが、割り当てられたロールに関連付けられたすべての権限のリストを取得するため、サーバーは次のような文字列を送り返します。CanCreateOrder,CanViewOrder,CanCancelOrder,CanFlagOrder
アプリケーション内で、ユーザーが認証されてそのリストを取得すると、そのリストはどこかの静的グローバル変数に格納されます(または、配列などに.split()されます)。
次に、個々のアイテムの可視性またはアクセスをチェックするときに、その配列または値の文字列をチェックするだけです。
これにより、定義する項目、最も重要なのは、基本的にハードコーディングしているアクセス許可が、それらが存在する関数型コードに固有であるため、多くの柔軟性が提供されます。したがって、それらを調整する必要はありません。
したがって、カスタマーサービス担当者が後で注文をキャンセルできるようにする場合は、その権限をその役割に関連付けるだけです。終わり。コードを変更する必要はありません。これは、権限がユーザーではなく、役割ではなく、その機能に関連付けられているだけだからです。
私はこれを多くのアプリケーションで行ってきました。その堅実な設計です。他のキーに関連付けられたアクセス許可が必要な場合、それは少し異なる話ですが、これは関係なく良い出発点です。
わかる?
**当然、セキュリティ交換を暗号化してSSL経由で送信し、そのトランザクションを保護することは議論の範囲外です;)