4

PrincipalPermission属性を持つすべてのビジネスオブジェクトにDeleteメソッドがあります。

例:

[PrincipalPermission(SecurityAction.Demand, Role = "Vendor Manager")]
        public static bool Delete(Vendor myVendor)
        {

            //do work here
        }

問題は、それが私のPrincipalPermissionを完全に無視しているように見えることです。それは、彼らがどんな役割を果たしていようと、誰でも通り抜けることができます。

他に忘れてしまったことはありますか?アプリケーションの「アプリケーションの起動」セクションで、アプリケーションのglobal.asaxに以下を追加しました。

AppDomain.CurrentDomain.SetPrincipalPolicy(System.Security.Principal.PrincipalPolicy.WindowsPrincipal);

しかし、それでも違いはありません。

私も次のことを試しました:

public static bool Delete(Vendor myVendor)
        {
            PrincipalPermission iPerm = new PrincipalPermission(null, "Vendor Manager");
            iPerm.Demand();

            //do work here
        }

そして、あなたは知らないでしょう、これはうまく機能します!....なぜそれが一方の方法で機能するが、もう一方の方法では機能しないのかについてのアイデアはありますか?

4

3 に答える 3

2

あなたはこれに対する答えを得ましたか?私は自分のアプリケーションでこれをテストしたところ、かなりうまく機能しています。私は特に追加していません

AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);

そして、私はフォーム認証(ASP.NETメンバーシップ)、MVC 2、.NET3.5を使用しています。

ただし、次の方法でクラスを装飾すると、メソッドの装飾が機能しないことがわかりました。

[PrincipalPermission(SecurityAction.Demand, Authenticated = true)]
于 2011-01-02T03:22:23.280 に答える
1

サンプルが機能しないと言っている人の観察は1つだけです。お住まいの地域の文化に応じて、役割の名前を確認してください。たとえば、メキシコにお住まいの場合は、@"BUILTIN\Administradores"の代わりに:を使用する必要があり@"BUILTIN\Administrators"ます。

于 2012-07-04T19:46:56.383 に答える
0

Windowsプリンシパルに、必要なアクセス許可がないことを検証しましたか?このようなもの(ここから変更)-私は思う-はその振る舞いを模倣し、あなたがステップスルーできるようにするべきです。許可が与えられているかどうかを示す必要があります。

これが通過した場合、属性も通過することを期待します。これが失敗したが、属性が通過した場合、私はあなたと同じように困惑しています。

static void Main(string[] args)
{
    AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);
    PrincipalPermission principalPerm = new PrincipalPermission(null, "Vendor Manager");
    try
    {
        principalPerm.Demand();
        Console.WriteLine("Demand succeeded.");
    }
    catch (Exception secEx)
    {
        Console.WriteLine("Demand failed.");
    }
    Console.ReadLine();
}
于 2010-11-08T21:42:44.743 に答える