我在所有具有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
        }


而且您会知道吗,这还行吗?

最佳答案

你得到答案了吗?我只是在自己的应用程序中对此进行了测试,并且效果很好。我专门不添加

AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);


而且,我使用的是表单身份验证(ASP.NET成员身份),MVC 2,.NET 3.5。

但是,我确实发现我是否使用以下方法装饰类,但方法装饰不起作用。

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

09-26 16:00