0

組み込みの ASP.NET メンバーシップ メカニズムを使用したいのですが、それでは十分ではないようです。人々が一連のタスク(役割)を実行できるようにするだけです。人を許可することはできますが、拒否するのは難しいようです。経理部の人を許可します。機密情報を表示するには、その部門の特定の人物を拒否する方法は? AccountDept ロールや AccountDeptNoSensitiveData ロールなどを作成する必要があります...アクティビティが多い場合は混乱します。

私の状況では、許可/拒否メカニズムを備えた古い古典的なグループとユーザーの方がはるかに優れています。ただし、以前に発明されたものを再発明したくはありません。それが私がここで求めていることです。

フォーム ベースの認証の場合、ASP.NET メンバーシップ メカニズムの拡張バリアントや、アプリでタスクを実行することを承認/拒否できる別の優れた「フレームワーク/ボイラープレート/レディメイド」はありますか?

4

4 に答える 4

1

クレームベースの承認は、探しているものかもしれません。ユーザーが特定の役割とその役割に付随するすべての承認を持つ代わりに、ユーザーは代わりに要求を実行します。これにより、より詳細な許可/拒否チェックが可能になります。

MSDNから:

これにより、純粋な RBAC (役割ベースのアクセス チェック) よりもはるかに細分性が高くなります。通常、多くのアクセス許可が 1 つの役割の下で収集されます。おそらく、さらに重要なことは、コード内のリソースに対する特定のアクションに対してアクセス許可を要求でき、バックエンド ポリシーを使用して提示エンティティが保持する必要があるクレームを構成できるため、クレーム ベースの承認によってビジネス ロジックと承認ポリシーをより適切に分離できることです。需要を満たすために。

以下は、.NET Rocks からの非常に優れたポッドキャストで、このトピックを理解するのに役立ちます: Dominick Baier Walks Us Through Claims-Based Security! .

System.Security.ClaimsASP.NET 4.5 では、コア フレームワークは、名前空間でフォーム認証を使用するときにクレーム ベースの承認を行うように装備されています。Page.Userオブジェクトは にキャストできますClaimsPrincipal。プリンシパルの主張を調べて、それに基づいて決定を下すことができます。つまり、特定のアクションの実行を許可するかどうかなどです。ClaimsAuthorizationManagerこれが ASP.NET でどのように行われるかについては、を参照してください。

コードはより複雑になる可能性がありますが、複数のロール定義で可能なすべての承認の組み合わせを一致させようとすると、管理上の頭痛の種になることは少なくなります。

于 2012-12-11T21:48:54.367 に答える
1

私の意見では、次のレベルの下に欠けている部分があります。それは権利または操作です。Authorization Manager にはこれらがありますが、そのためのネイティブ API はありません。AzMan com ベースの API を使用することは悪です。

本質的に、何かをしたいときは、ユーザーが特定の権限を持っているかどうかを確認します。これらの権利は、ユーザーを割り当てる役割で収集されます。これにより、何百万ものロールを持たなくても、ロールが実行できることをきめ細かく制御できます。

残念ながら、「権限 API」を提供するものは何も知りません。私は自分のアプリ用に独自のものを作成しました。私が見たほとんどのアプリは、独自のものをロールバックしているようです。

于 2012-12-11T21:49:11.093 に答える
0

おそらく、組み込みの ASP.NET メンバーシップ プロバイダーを引き続き使用し、ロールをグループとして使用して、「ユーザーはロール内にいますか」という質問をやめることができます。

 User.Identity.IsAuthenticated && Roles.IsUserInRole(user, role)

代わりに、以下のようにタスク リストと権限リストを追加できます。

 Tasks
    Task1    name="Accounting"
       Allow roles="Accounting", "Executive"
       Allow users="SalesPerson1", "OtherPerson2" //Granted people
       Deny  users="AccountingPerson1" //Banned person

そして、ユーザーの許可を求めます

  User.Identity.IsAuthenticated && MyCustomSecurity.HaveRight(user, task)

わかりました、誰かがすでに私が言及したことをしました:

http://permissionmanager.codeplex.com/

于 2012-12-12T12:05:48.060 に答える