Код игнорирует атрибут 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
}
и разве вы не знаете, это работает просто отлично!.... есть идеи, почему это работает в одну сторону, а не в другую?
3 ответа
Вы получили ответ на это? Я только что проверил это в моем собственном приложении, и оно работает довольно хорошо. Я специально НЕ добавляю
AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);
И я использую проверку подлинности с помощью форм (членство в ASP.NET), MVC 2, .NET 3.5.
Тем не менее, я обнаружил, что я украсил свой класс следующим образом: мои методы украшения не работают.
[PrincipalPermission(SecurityAction.Demand, Authenticated = true)]
Только одно наблюдение для любых людей, которые говорят, что образец не работает. Проверьте название роли в соответствии с вашей местной культурой. Например, если вы проживаете в Мексике, вы должны использовать: @"BUILTIN\Administradores"
вместо @"BUILTIN\Administrators"
,
Подтвердили ли вы, что у участника 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();
}