我需要对某些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();
}
}
}
答案 0 :(得分:4)
通常我会说是,但是WCF有办法进行授权,因此使用PostSharp将是多余的和不必要的工作。
如果您需要实施自定义授权设置,那么PostSharp将极大地帮助您。