Ответ 1
Абстрагированный вид идентичности часто является IPrincipal
/IIdentity
:
IPrincipal principal = Thread.CurrentPrincipal;
IIdentity identity = principal == null ? null : principal.Identity;
string name = identity == null ? "" : identity.Name;
Это позволяет работать с одним и тем же кодом во многих разных моделях (winform, asp.net, wcf и т.д.), но он полагается на то, что идентификатор устанавливается заранее (так как он определен в приложении). Например, в winform вы можете использовать текущее имя пользователя Windows:
Thread.CurrentPrincipal = new WindowsPrincipal(WindowsIdentity.GetCurrent());
Однако, главный может также быть полностью на заказ - он не обязательно относится к учетным записям Windows и т.д. Другое приложение может использовать экран входа в систему, чтобы позволить произвольным пользователям регистрироваться:
string userName = "Fred"; // todo
string[] roles = { "User", "Admin" }; // todo
Thread.CurrentPrincipal = new GenericPrincipal(new GenericIdentity(userName), roles);