このペーパーから読んだことから 、ロールベースのアクセス制御システムは、ロールがオブジェクトに対する操作を実行するためのアクセス許可を指定するロールにユーザーを割り当てることができるシステムであることがわかりますが、asp.netでは「オブジェクトに対する操作」を指定していません。ここで意味するのは、「ロールRのすべてのユーザーがオブジェクトOに対して削除を実行できる」をどのように指定できるかということです。ASP.Netのオブジェクトパーツはどこにありますか
4 に答える
セキュリティモデルはasp.netでかなり制限されています。本質的に、あなたは役割レベルでしかコントロールできません。つまり、どの操作でも、その操作の実行を許可する役割のいずれかがユーザーであるかどうかをテストする必要があります。
私たちは、はるかに細かい粒度を提供する独自のモデルを定義するという道を歩みました。基本的に、操作を定義し、それらの操作をさまざまな役割に割り当てます。このようにして、「アカウントの削除」権限があるかどうかをテストするのに対して、「管理者」、「アカウント管理者」、またはその他の任意の数の役割にあるかどうかをテストできます。これは、ActiveDirectoryの動作と非常によく似ています。さらに、必要に応じてロールを再構成できます。
Windowsに付属しているAuthorizationManager(AzMan)と呼ばれるものがあります。メンバーシッププロバイダーと連携して、運用レベルの制御を提供できます。成功した人もいれば、仕事が難しいと不満を言う人もいます。約5年前にプロジェクトで使用しましたが、当時は約95%の時間で機能していました。他の5%は、ADコントローラーとの通信に問題がありました。
それはあなたの質問に私たちを導きます:組み込みのASP.Netメンバーシッププロバイダーは真の役割ベースのアクセス制御システムですか?いいえ。操作ではなく、役割を定義できます。
よりきめ細かいものが必要な場合は、サイのセキュリティを確認してください。
以前の投稿で提案されたように、より細分性を実現するには、既存のASP.netメンバーシップおよびロールプロバイダーを構築する必要があります。http://www.visualaccesscontrol.comなどのサードパーティのコントロールがあり 、ロールベースのモジュールアクセスセキュリティとデータアクセスセキュリティも提供します。Visual Access Controlsを使用すると、ASP.net Webアプリケーションに管理機能を追加して、ユーザーが実行を許可されているアクティビティと、それぞれの役割に基づいて表示を許可されているデータのサブセットに動的に制限できます。
削除操作を実装しているので、ログインしているユーザーがオブジェクトを削除する権限を持っているかどうかを確認するのはあなた次第です。たとえば、ロール「CanDeleteOs」を作成できます。次に、コードは次のようになります。
if ( !Roles.IsUserInRole("CanDeleteOs") )
throw new Exception("User does not have permission to delete O's.");