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