1

Windows Identity Foundation (WIF) には、 というクラスがありClaimsPrincipalPermissionます。MSDN のドキュメントは非常にまばらです。それは述べています:

ClaimsPrincipalPermission は、リソースへのアクセスに必要なアクセス許可を表します。ClaimsPrincipalPermission は、アクセスするリソースを表す文字列と、リソースに対して実行するアクションを表す文字列を受け取ります。Demand が呼び出されると、プリンシパルは、指定されたリソースに対して指定されたアクションを実行するためのアクセス許可を持っている必要があります。そうでない場合、Demand は例外をスローします。

これはカッコいい。関数に属性を設定して、許可されたユーザーだけがその関数を呼び出せるようにすることができます。この機能を動作させるのに問題はありません。

ただし、別の問題があります。特定のユーザーのみがアクセスできる多くの機能を備えた Web アプリケーションに取り組んでいます。ログインしたユーザーがアクセスできる機能を備えたページへのリンクのみを表示するようにページをコーディングしたいと考えています。

ClaimsPrincipalPermission でこれを行う唯一の方法は、次のことです。

   Dim foo As ClaimsPrincipalPermission
    foo = New ClaimsPrincipalPermission(resource:="SECRET_FUNCTION", action:="EXECUTE")
    Try
        foo.Demand()
        response.write(Link_To_Execute_Secret_Function)
    Catch ex As Exception
        response.write("No access to Secret Function")
    End Try

私の上司は、そのような「例外によるコーディング」は容認できないことを私にはっきりと伝えました。この種のものを小さなライブラリにカプセル化できると確信していますが、WIF がこれにどのように使用されることを意図しているか知りたいです。

ところで、WIF で特定の Web ページへのアクセスを自動的にチェックできることは承知していますが、このプロジェクトのアーキテクトは、Web ページの URL ではなく、制限する機能の名前を指定したいと考えています。

どうするのが一番いいですか?

アップデート

これまでのところ、私が見つけた最善の方法は、結果を軽減するために例外によってプログラミングをカプセル化することです...

4

2 に答える 2

0

何年も遅すぎるかもしれませんが、あなたはClaimsAuthorizationManager

AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);
Thread.CurrentPrincipal = ClaimsPrincipal.CreateFromPrincipal(Thread.CurrentPrincipal);

ClaimsAuthorizationManager cam = new ClaimsAuthorizationManager();
if (cam.CheckAccess(new AuthorizationContext((IClaimsPrincipal)Thread.CurrentPrincipal, "SECRET_FUNCTION", "EXECUTE")))
{
    Response.Write(Link_To_Execute_Secret_Function) 
}
于 2012-06-13T10:42:11.593 に答える
0

どのユーザー/ロール/特定のページにアクセスできるものは、どこかのテーブルに保存されていますか? もしそうなら、あなたはそれにアクセスできますか?特定の機能に対するユーザー権限はデータベースにもありますか? 「はい」、「はい」、「はい」の場合、WIF ではなく独自のオブジェクト モデルを使用して、データベースからより直接的にページにリンクをレンダリングする必要があります。これはとてもきれいでしょう。WIF からの情報からメニュー オプション (すべてのページで実行する必要があると思いますか?) をコーディングするのは、面倒でかさばるように思えます。

于 2010-04-13T14:12:59.417 に答える