我对所有具有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
}你不知道吗,这工作得很好!有什么想法可以解释为什么它以一种方式工作而不是另一种方式工作?
发布于 2011-01-02 11:22:23
你得到答案了吗?我刚刚在我自己的应用程序中测试了这一点,它工作得很好。我特别不会添加
AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);而且,我使用的是表单身份验证(ASP.NET成员资格)、MVC2、.NET 3.5。
然而,我发现如果我用下面的方法修饰我的类,就不能工作。
[PrincipalPermission(SecurityAction.Demand, Authenticated = true)]发布于 2012-07-05 03:46:56
对于任何人来说,只有一个观察结果表明这个样本不起作用。检查角色的名称是否符合您当地的文化。例如,如果您居住在墨西哥,则必须使用:@"BUILTIN\Administradores"而不是@"BUILTIN\Administrators"。
发布于 2010-11-09 05:42:45
您是否验证了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();
}https://stackoverflow.com/questions/4128186
复制相似问题