PrincipalPermission vs Authorize Attribute?

Кто-нибудь может объяснить мне различия и варианты использования этих двух атрибутов? Я совершенно сбит с толку, так как они ведут себя одинаково.

Я знаю, что [Authorize] подключается к жизненному циклу приложения ASP.NET и запускается до того, как запрос достигает контроллера / действия. Как насчет принципала разрешения?

[PrincipalPermission(SecurityAction.Demand, Role="Admin")]

А также

[Authorize(Roles="Admin")]

1 ответ

Решение

Authorize Атрибут используется для указания ограничения доступа к контроллеру или методу действия. Другими словами, вы можете предоставить или запретить пользователям / ролям доступ к отдельным страницам или URL-адресам на сайте.

Когда вы аутентифицируете пользователя в приложении ASP.NET, идентификация аутентифицированного пользователя будет автоматически передаваться по запросу этого пользователя на сервере.

Вы можете использовать эту информацию о личности на бизнес-классах через PrincipalPermission приписывать. С PrincipalPermission Вы можете авторизовать возможности пользователя. Например, вы можете запретить пользователям создавать экземпляры классов или обращаться к методам в ваших бизнес-классах.

Это позволяет легко добавлять чистые правила авторизации безопасности для вашего бизнеса и уровней данных.

using System;
using System.Security.Permissions;

[PrincipalPermission(SecurityAction.Demand, Authenticated = true)]
public class EmployeeManager
{
    [PrincipalPermission(SecurityAction.Demand, Role = "Manager")]
    public Employee LookupEmployee(int employeeID)
    {
       // todo
    }

    [PrincipalPermission(SecurityAction.Demand, Role = "HR")]
    public void AddEmployee(Employee e)
    {
       // todo
    }
}

Например, используя PrincipalPermission атрибутов,

  • EmployeeManager Класс может быть создан только авторизованными пользователями.
  • LookupEmployee метод может быть доступен только пользователям с Manager роль.

Рекомендации

Добавление правил авторизации на бизнес-уровень и уровень данных

Рекомендации по безопасности ASP.NET 2.0

Другие вопросы по тегам