2010-11-08 106 views
4

我对所有具有PrincipalPermission属性的业务对象都有一个Delete方法。代码忽略PrincipalPermission属性?

例子:

[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 
     } 

,不会你知道,这只是罚款....任何想法,为什么它的工作的一种方式而不是其他!?

回答

2

您是否得到了答案?我只是在我自己的应用程序中测试过它,它工作得很好。我特别没有添加

AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal); 

而且,我正在使用窗体身份验证(ASP.NET成员资格),MVC 2,.NET 3.5。

但是我发现如果我用以下我的方法装饰我的类装饰不起作用。

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

如果你用@Steven注释来装饰类,任何人都知道为什么方法装饰不起作用?我也遇到同样的情况。 – JasonS 2012-01-24 07:02:50

+1

下面是答案:http://connect.microsoft.com/VisualStudio/feedback/details/95127/nested-principalpermission-not-applied – JasonS 2012-01-24 19:04:19

+0

答案已消失。也许在评论中描述它? – 2015-03-25 14:55:45

0

您是否验证过Windows主体没有碰到您要求的权限?像这样的东西(从here修改) - 我想 - 应该模仿这种行为,并允许你一步一步。它应该表明是否授予许可。

如果通过,那么我希望该属性也通过。如果这失败了,但属性通过了,那么我就像你一样难住了。

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(); 
} 
+0

哈..我只是试过这个。我将这样的代码添加到了Delete方法的开头,并且在完成该方法后正确验证了用户。 Hrmph! – 2010-11-08 21:52:03

+0

@Amanda - 嗯......这令人沮丧。我试图做你(最初)做的,并添加了一个具有该属性的方法。它似乎正确地“要求”我的角色;它花了一段时间,但是当我试图调用需要“供应商管理者”角色的方法时,最终抛出了安全异常。我不知道为什么它会为你扮演flaika(??) – Steven 2010-11-08 22:16:00

+0

其实,我刚刚注意到你提到了global.asax。我对ASP.Net并不熟悉,但我想知道这是否是这种差异。我在控制台应用程序中完成了所有测试,并且该属性似乎在该环境中按预期工作。 – Steven 2010-11-08 22:21:37

1

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