8

次の要件を持つ ASP.NET アプリケーションで認証を構築することを検討しています。

  • ユーザーはただ 1 つの役割 (すなわち、管理者、セールスマネージャー、セールスなど) を持ちます。
  • ロールには、既存のオブジェクトのサブセットに CRUD アクセスするための一連の権限があります。つまり、「Sales には、オブジェクト タイプ「Products」に対する CREAD、READ、WRITE 権限がありますが、DELETE 権限はありません」
  • どういうわけか、アクセス許可が継承のある階層にあるのが好きなので、管理者は利用可能なすべてのオブジェクトを指定する必要がありません。
  • システムは、「ユーザー X はオブジェクト Z に対して Y を実行する権限を持っていますか?」という質問に迅速に答えることができなければなりません。
  • すべてのデータベース管理 (MSSQL)、C#/ASP.NET で実装

これらの要件に関するフィードバックを希望しますか? ASP.NETフレームワークを使用してこれを実装する方法はありますか(可能な限り)? (ただし、メンバーシップなしでこれを達成する方法も知りたいです)

4

5 に答える 5

6

ここで行う必要があるのは、一連のアクセス許可クエリ メソッドをビジネス オブジェクトまたはコントローラーに実装することだと思います。例: CanRead()、CanEdit()、CanDelete()

ページがレンダリングされるとき、ビジネス オブジェクトをクエリし、ユーザーが承認した機能を判断し、この情報に基づいて機能を有効または無効にする必要があります。次に、ビジネス オブジェクトは、ロールまたは追加のデータベース クエリを使用して、アクティブなユーザーの権限を判断できます。

これらのアクセス許可を一元的に宣言的に定義する方法は考えられません。関数の実装に分散する必要があります。ただし、設計を改善したい場合は、依存性注入を使用してオーソライザーをビジネス オブジェクトに挿入し、実装を分離しておくことができます。

Rocky Lhotka の本には、このモデルを使用するコードがいくつかあります。新しいバージョンはまだGoogleにありません。

于 2008-12-19T22:00:01.373 に答える
2

私はあなたの要件を満たすと私が思う最高の実装の1つがここに文書化されていると思います。唯一の問題は、これがNHibernateにフックすることですが、これをテンプレートとして使用して、独自のパーミッション実装を作成し、NHibernatesインターセプターではなく独自のイベントモデルにフックすることができます。

私は自分でそのようなシステムに取り組んでおり、満足したらブログに載せます。

于 2009-06-16T13:13:19.370 に答える
1

ASP.NET メンバーシップの設定方法については、http: //msdn.microsoft.com/en-us/library/yh26yfzy.aspxを参照してください。

フォルダ/ページなどをグループ/ユーザーにグループ化できます。これで十分だと思います!

階層は、生成されたデータベースと手順を拡張することで簡単に管理できます。

于 2008-12-19T08:21:37.163 に答える
1

ASP.NET 2.0 以降に提供されているメンバーシップ API は、要件に適しているはずです。残念ながら直接サポートされていないのは、階層的な役割だけです。ただし、手動で作成された別の階層ロール テーブルで通常のロール ベースのセキュリティを簡単に使用して、必要なことを達成することができます。

于 2008-12-19T08:19:42.237 に答える
0

ユーザーとロールの関係を構築して、ユーザーが複数のロールを持つことができるようにします。私は 1 対 1 の関係を見て緊張します。今はその必要性が見られなくても、いつの日か誰かがセールス ユーザーとカスタマー サービス ユーザーの両方になってほしいと思うようになることを知っているからです。

私たちの顧客システムでは、ロールを使用して「delinquentCustomer」などを重ねています。そうすれば、請求書を支払うとすぐに、元のアクセス許可が引き続き有効になります。このアプローチを検討する価値があります。

于 2010-04-12T14:07:27.720 に答える