Je développe actuellement mon propre AuthorizationManager, il ressemble à quelque chose comme ça:AuthorizationManager en fonction des paramètres invocation de service
public class MyAuthorizationManager : ServiceAuthorizationManager
{
static bool initialize = false;
public override bool CheckAccess(OperationContext operationContext)
{
ServiceSecurityContext context = ServiceSecurityContext.Current;
string[] roles = Roles.GetRolesForUser(operationContext.ServiceSecurityContext.PrimaryIdentity.Name);
return roles.Count() > 0;
}
public override bool CheckAccess(OperationContext operationContext, ref System.ServiceModel.Channels.Message message)
{
MessageBuffer buffer = operationContext.RequestContext.RequestMessage.CreateBufferedCopy(int.MaxValue);
message = buffer.CreateMessage();
Console.WriteLine(message);
return base.CheckAccess(operationContext, ref message);
}
}
Je voudrais effectuer une vérification d'autorisation sur la base d'un paramètre de contrat de service, par exemple, si le contrat ressemble à:
[ServiceContract]
public interface IServerContract
{
[OperationContract]
[ServiceKnownType(typeof(ChildTypeOne))]
[ServiceKnownType(typeof(ChildTypeTwo))]
string SecuredMessage(ParentType incoming);
}
Mon but est autorise en fonction du type, dans l'exemple, autorise si la date d'arrivée est ChildTypeOne et deniying au cas où il était ChildTypeTwo.
J'ai vérifié « Message » et il ressemble à:
- Il doit être déchiffré
- semble dépendre fortement sur la liaison
est-il un moyen facile d'obtenir simplement type de paramètre?