2

ASP.NETWebアプリケーションに取り組んでいます。私にはこのよく知られた問題があります。各ユーザーは1つまたは複数のロール(管理者、パブリックユーザー)に属することができ、各ロールは1つまたは複数の権限(編集、削除、アップロードなど)を持つことができ、その逆も可能です。私は次のようにsmthを実行したいと思います:[ http://demo.sitefinity.com/Sitefinity/Admin/Modules.aspx?route=GenericControlPanel.PermissionsView`1 ]。

私はこれを実装するためにこれらのオプションを見つけました:

  • NetSqlAzManを使用します(ただし、ユーザーはアプリケーションと同じデータベースに保存されておらず、フォーム認証を使用しているため、アプリケーションで機能するかどうかはわかりません)
  • User.HasPermission /AddPermissionToUser/などを可能にする独自のクラスを実装します。
  • 2つのロールプロバイダーを使用します。1つはロールを管理し、もう1つはパーミッションを管理します。ロールとパーミッションの間のm:n関係により、これらのプロバイダーが「リンク」されることを認識しています。
  • 現在、カスタムロールプロバイダーを使用しているため、別のオプションとして、このプロバイダーへのアクセス許可を管理するメソッドを追加します。

また、特定のユーザーの役割と権限をキャッシュしたいと思います。自分でやるには少し時間がかかると思いますが、何を提案しますか?

前もって感謝します

4

2 に答える 2

4

パーミッションモジュールの優れたパッケージソリューションを見つけたら、ぜひご覧ください:)

一般的に、組み込みのセキュリティプロバイダーは、「識別」と「承認」の部分の後で停止します。識別され、アプリケーションへのアクセスが許可されると、より具体的なページまたは機能レベルの権限をコーディングして管理することができます。

説明する権限のレベルは、実際には実装するのに非常に高度なものです。Windowsのアクセス制御リスト(ACL)をミラーリングします。かなり簡単に見えますが、実際にはコーディングは非常に困難です。設計に取り掛かると、「拒否」オーバーライド権限を実装し、マルチレベルのグループ権限マージを処理し、「特別な」権限などを処理する必要があることがわかります。次に、「編集権限はビューも意味しますか。ビューがないが追加がある場合はどうすればよいですか」などの問題に遭遇します。

それは本当の混乱になる可能性があります。

そのレベルの複雑さでアクセス許可を実装する前に、一歩下がって、アクセス許可と役割/グループモデルを少しフラット化できるかどうかを確認することを強くお勧めします。あなたは自分の役割を許可にするだけで逃げることができませんか?たとえば、編集できる人の役割、追加できる人の役割、表示できる人の役割などです。

ほとんどのアプリケーションでは、パーミッションシステムの粒度のような完全なACLは実際には必要ありません。

アプリケーションが実際に必要とする適切なレベルのアクセス許可を定義したら、通常、それらのアクセス許可を管理するために一連のカスタムオブジェクトをロールするのが最善です。これまで、2番目のリンクされた役割プロバイダーを権限マネージャーとして使用することを検討したことはありません...それは実際にはちょっと素晴らしいアイデアです。しかし、私はまだそれに対して忠告します。ロールプロバイダーは、実行しようとしていることを目的として設計されていないため、デフォルトの動作を拡張してオーバーライドする必要があるため、カスタム実装をゼロから使用するだけで、よりシンプルで保守しやすくなります。

于 2009-10-07T05:20:02.740 に答える
2

これは、認証+権限と役割+ロギングと監査を組み合わせたツールです http://visual-guard.com/

認証はWindowsにすることができます。この場合、シングルサインオンまたはユーザー名とパスワードの組み合わせを実装します。

ユーザーとアクセス許可を管理するために2つのコンソールを使用できます。1つは開発者向けであり、コーディング(.Netの場合)、展開、およびバージョン管理機能なしでアクセス許可を定義するウィザードを提供します。-もう1つは、Webベースの、技術者以外のユーザー管理者向けであり、ユーザーアカウント、グループ、およびそれらのロールへのマッピングに重点を置いています。

許可は、ある種の条件で非常にきめ細かくすることができます(このフォームは、午前8時から午前11時まで「医師」の役割に表示されます。これは、午前中にのみ投与する必要がある薬に関連しているためです)。

もともとは.Net指向のみでしたが、現在はJava、Delphi C ++、基本的にWebサービスを呼び出すことができるすべてのテクノロジなどの他のテクノロジをサポートしています。

于 2010-01-25T16:52:45.553 に答える