У меня есть класс, который реализует IAuthorizationPolicy.Я настроил пользовательский объект Principal на основе зарегистрированного пользователя, который имеет все мои роли базового уровня (я также сделал это с помощью утверждений).Теперь я хотел бы изменить роли, которые имеет конкретный участник, в зависимости от значения ключа, переданного в качестве параметра сообщения.
Проблема, с которой я сталкиваюсь, заключается в том, что сообщение запроса не может быть прочитано в классе политики авторизации, посколькуУ меня нет доступа, чтобы написать сообщение обратно в контекст запроса.Я могу скопировать и прочитать сообщение в производном классе ServiceAuthorizationManager, используя переопределение метода CheckAccess.Однако я должен убедиться, что метод GetAuthorizationPolicies уже был вызван до того, как это сделать.
Я ищу предложения о том, как я могу изменить роли участника, в зависимости от того, содержит ли сообщениеконкретный параметр.Обычно, когда идентификатор метода Evaluate вызывается из политики, я хочу сделать что-то вроде этого:
string myObjectId = null;
if (!messageCopy.IsEmpty)
{
System.Xml.XmlDictionaryReader xdr = messageCopy.GetReaderAtBodyContents();
xdr.ReadToDecendant("objectId");
if (xdr.Read())
{
myObjectId = xdr.ReadContentAsString();
}
xdr.Close();
}
messageCopy.Close();
ClaimSet claims = (myObjectId != null) ?
MapClaims(identity, myObjectId) : MapClaims(identity);
DefaultPrincipal principal = new DefaultPrincipal(identity, claims);