Подходит ли PostSharp для задач авторизации?

Мне нужно выполнить авторизацию и аудит некоторых методов службы WCF. Я хотел бы выполнить обработку в атрибуте, чтобы не загрязнять свой код. Я создал настраиваемый атрибут с помощью PostSharp, и мне интересно, подходит ли этот подход или есть ли какие-либо проблемы с использованием PostSharp для механизмов авторизации, учитывая, что он настраивает MSIL?

В моем классе обслуживания WCF я использую атрибут следующим образом.

 [AuthoriseAndAudit(UserRoleTypesEnum.Operator)]
 public JSONResult<bool> IsAliveAuthorised()
 {
     return new JSONResult<bool>() { Success = true, Result = true };
 }

Сокращенный код атрибута приведен ниже.

using PostSharp.Aspects;

[Serializable]
public class AuthoriseAndAuditAttribute : OnMethodBoundaryAspect
{
    private static ILog logger = AppState.logger;

    private UserRoleTypesEnum _requiredRole = UserRoleTypesEnum.None;

    public AuthoriseAndAuditAttribute(UserRoleTypesEnum role = UserRoleTypesEnum.None)
    {
        _requiredRole = role;
    }

    public override void OnEntry(MethodExecutionArgs args)
    {
        logger.Debug(String.Format("AuthoriseAndAuditAttribute checking {0}.", args.Method.Name));

        // Get the user's session from cookie.
        UserSession userSession = GetUserSession();

        // Check that user is in the required role.
        bool isAuthorised = (_requiredRole == UserRoleTypesEnum.None || (userSession != null && userSession.Roles.Contains(_requiredRole)));

        // Write an audit table entry.
        logger.Debug("Writing audit table entry.");

        if (!isAuthorised)
        {
            logger.Warn("Not authorised for " + args.Method.Name + ".");
            throw new UnauthorizedAccessException();
        }
    }
}

person sipsorcery    schedule 18.01.2012    source источник


Ответы (1)


Обычно я бы сказал да, но в WCF есть способы авторизации, поэтому использование PostSharp было бы избыточной и ненужной работой.

Если вам нужно реализовать пользовательскую настройку авторизации, то да, PostSharp очень поможет в этом.

person Dustin Davis    schedule 18.01.2012
comment
Да, в WCF есть встроенные механизмы авторизации, но они вращаются вокруг SOAP и/или Windows. В этом случае я открываю конечную точку REST, и небольшая переделка моего провайдера членства в ASP.Net выполняет эту работу. Что я пытаюсь сделать с PostSharp, так это использовать мой очиститель собственной схемы аутентификации. - person sipsorcery; 18.01.2012
comment
В таком случае да. PostSharp позволит вам легко очистить и внедрить вашу схему авторизации/аутентификации. Если вам нужно быстро изучить PostSharp, см. programmersunlimited.wordpress.com/postsharp-principals. - person Dustin Davis; 18.01.2012