При соединении с сервером, клиент передает логин и пароль(хэш).
Сервер проверяет по БД и при успешности сохраняет в CallContext
что-то вроде SESSION_ID.
Теперь то, что не совсем ясно:
Я думаю вешать на каждый метод сервера атрибут, наподоби
[PrincipalPermissionAttribute(SecurityAction.Demand, Role="Admin")]
public void Method1()
{
//...
}
Для того, чтобы это работало, я должен для определенного клиента вызвать:
System.AppDomain.CurrentDomain.SetThreadPrincipal(
new CustomPrincipal(new CustomIdentity(userName))
);
Но это устанавливается для всего потока. И с этим потоком работают разные клиенты.
Здравствуйте, xandr, Вы писали:
X>Но это устанавливается для всего потока. И с этим потоком работают разные клиенты.
обычно, с потоком работает только один клиент (если, это не фибер). достаточно просто на время обработки выставлять свой принципал, а по завершении менять его на старый.
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Здравствуйте, TK, Вы писали:
TK>Здравствуйте, xandr, Вы писали:
X>>Но это устанавливается для всего потока. И с этим потоком работают разные клиенты.
TK>обычно, с потоком работает только один клиент (если, это не фибер). достаточно просто на время обработки выставлять свой принципал, а по завершении менять его на старый.
Можно ли регистрацию/дереристрацию засунуть сюда:
public class MyMessageSink: IMessageSink
{
//.....
public virtual IMessage SyncProcessMessage(IMessage msg)
{
// регистрируем принцпала
// { перешлем сообщение след }
// дерегистрируем
return ret_msg;
}
}
Или как по другому лучше сделать, что-бы это происходило автоматом?
Hello, "xandr"
> TK>обычно, с потоком работает только один клиент (если, это не фибер). достаточно просто на время обработки выставлять свой принципал, а по завершении менять его на старый. > > Можно ли регистрацию/дереристрацию засунуть сюда: > Или как по другому лучше сделать, что-бы это происходило автоматом?
Обычно, так и делают.
Posted via RSDN NNTP Server 1.9
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Здравствуйте, TK, Вы писали:
TK>Hello, "xandr"
>> TK>обычно, с потоком работает только один клиент (если, это не фибер). достаточно просто на время обработки выставлять свой принципал, а по завершении менять его на старый. >> >> Можно ли регистрацию/дереристрацию засунуть сюда: >> Или как по другому лучше сделать, что-бы это происходило автоматом?
TK>Обычно, так и делают.
OK. Sanx
PS: Может есть кусок рабочего кода из какого-нибудь проекта?