Код игнорирует атрибут 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();
}
Другие вопросы по тегам