代码忽略了PrincipalPermission属性?

我在所有具有PrincipalPermission属性的业务对象上都有一个Delete方法。

例:

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

问题是它似乎完全忽略了我的PrincipalPermission。 无论他们扮演什么样的角色,它都可以让任何人通过。

还有其他我忘了做的事吗? 我在Application Startup部分的应用程序的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 } 

并且不知道,这个工作得很好!….任何关于它为什么单向工作而不是另一个工作的想法?

你有答案吗? 我刚刚在自己的应用程序中对此进行了测试,效果非常好。 我特意不添加

 AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal); 

而且,我正在使用表单身份validation(ASP.NET成员身份),MVC 2,.NET 3.5。

然而,我确实发现如果我用以下方法装饰我的类,装饰不起作用。

 [PrincipalPermission(SecurityAction.Demand, Authenticated = true)] 

对于任何说该样本不起作用的人,只有一个观察结果。 根据您当地的文化检查角色的名称。 例如,如果您居住在墨西哥,则必须使用: @"BUILTIN\Administradores"而不是@"BUILTIN\Administrators"

您是否validation过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(); }