私は、開発中のWebフレームワークの一部としてアクセス制御システムを構築しているところです。私はそれを超柔軟で素晴らしいものにしたいと思っています。私のデザインに関する意見や洞察を提供することで私を助けてくれませんか?これが私のこれまでの仕事です(私の特定の質問は一番下にあります):
ユーザー
- ユーザーにはユーザー名(32文字、スペースなし)とパスワードがあります
- ユーザーには、確認が必要な1つ以上の電子メールアドレスがあります
- ユーザーは、ユーザー名または任意の電子メールアドレスを使用してログインできます
- ユーザーはゼロまたは多数のアカウントに関連付けられている可能性があります
アカウント
- アカウントは1人以上のユーザーを表します
- 各ユーザーは、アカウントに対して特定の権限または役割を持っている場合があります(たとえば、アカウント所有者または「新しいユーザーを追加できます」)
- すべてのアカウントはアカウントタイプに関連付けられています
アカウントの種類
- アカウントタイプには、ゼロまたは多数のアカウントタイプの役割があります
- アカウントタイプには、ゼロまたは多くのアカウントタイプ機能があります
アカウントタイプの役割
- 例:「所有者」、「管理者」、「パワーユーザー」、「ゲスト」など。
- アカウントタイプの役割は、アカウントタイプの権限のコレクションです
アカウントタイプのアクセス許可
- アカウントタイプのアクセス許可は、アプリケーションロジックが検証するシステム内の特定のアクションです。
- それらは親を参照する可能性があるため、階層的にグループ化できます
- 例えば:
- 「ユーザー管理」
- "ユーザーを追加する"
- 「ユーザーの削除」
- 「ユーザー管理」
- これらの権限は、アカウントタイプ機能専用の場合があります
アカウントタイプの機能
- アカウントタイプの機能をアカウントでアクティブ化して、より多くの権限を付与することができます
- 例:「スタンダードアカウント」または「プレミアムアカウント」
- これらの機能をアカウントで有効にすると、アカウント所有者はシステムにアクセスしやすくなります
- それらは、アクティブ化または非アクティブ化されたときに追跡され、定期的またはオンデマンドで請求できます
質問
アプリケーションロジックでユーザーアクションをチェックするための最良の方法は何ですか?私はユーザーのすべてのアクセス許可をセッションのオブジェクトに保存することを考えていました(アクセス許可を更新するにはログアウト/ログインが必要ですが、私はファンではありません-リアルタイムのアクセス許可管理に関するアイデアはありますか?):
{
"All Permissions": {
"User Management": {
"Add User",
"Delete User"
},
"Premium Account": {
"Download Files",
"Upload Files"
},
}
}
次に、システム内の特定のアクションに必要なアクセス許可を宣言します。多分次のようなものです:
Permission::require('Add User');
宣言されたアクセス許可がユーザーのアクセス許可オブジェクトにない場合、要求は失敗します。ただし、これはユーザーのアクションごとにやや強烈に思えます。また、権限の別のサブセットに「ユーザーの追加」という文字列がある場合はどうなりますか?
これについて助けてくれてありがとう!