PostSharp是否适合授权任务?

时间:2012-01-18 04:18:37

标签: attributes wcf-security 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();
        }
    }
}

1 个答案:

答案 0 :(得分:4)

通常我会说是,但是WCF有办法进行授权,因此使用PostSharp将是多余的和不必要的工作。

如果您需要实施自定义授权设置,那么PostSharp将极大地帮助您。