Подходит ли PostSharp для задач авторизации? - PullRequest
1 голос
/ 18 января 2012

Мне нужно сделать авторизацию и аудит некоторых методов сервиса 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();
        }
    }
}

1 Ответ

4 голосов
/ 18 января 2012

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

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

...