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、.NET 3.5。

但是,我确实发现如果我用以下方法装饰我的班级,我的方法装饰不起作用。

[PrincipalPermission(SecurityAction.Demand, Authenticated = true)]
于 2011-01-02T03:22:23.280 回答
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 回答