Код игнорирует атрибут PrincipalPermission? - PullRequest
4 голосов
/ 09 ноября 2010

У меня есть метод 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 ]

2 голосов
/ 02 января 2011

Вы получили ответ на это?Я только что проверил это в моем собственном приложении, и оно работает довольно хорошо.Я специально НЕ добавляю

AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);

И я использую проверку подлинности с помощью форм (членство в ASP.NET), MVC 2, .NET 3.5.

Однако я обнаружил, что я украшаюмой класс со следующими украшениями моих методов не работают.

[PrincipalPermission(SecurityAction.Demand, Authenticated = true)]
1 голос
/ 04 июля 2012

Только одно наблюдение для любых людей, которые говорят, что образец не работает. Проверьте название роли в соответствии с вашей местной культурой. Например, если вы проживаете в Мексике, вы должны использовать: @"BUILTIN\Administradores" вместо @"BUILTIN\Administrators".

0 голосов
/ 09 ноября 2010

Подтвердили ли вы, что у участника 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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...