AuthenticationAdapter
AuthenticationAdapter
- класс, позволяющий осуществлять добавление пользователей в БД системы полномочий при windows-аутентификации.
Данный класс находится в CheckingLibrary.dll
(версия сборки после 01.02.2013).
Методы класса AuthenticationAdapter
Класс AuthenticationAdapter
предоставляет следующие статические методы:
1.
/// <summary>
/// Получение объекта, соответствующего текущему пользователю в БД полномочий
/// (полное имя пользователя берётся как HttpContext.Current.User.Identity.Name)
/// </summary>
/// <returns>Объект или null, если ничего не было найдено</returns>
public static Agent GetDbUser()
2.
/// <summary>
/// Получение объекта, соответствующего текущему пользователю в БД полномочий
/// </summary>
/// <param name="username">Полное имя пользователя</param>
/// <returns>Объект или null, если ничего не было найдено</returns>
public static Agent GetDbUser(string username)
3.
/// <summary>
/// Получение объекта, соответствующего текущему пользователю в БД полномочий.
/// </summary>
/// <param name="username">Полное имя пользователя.</param>
/// <param name="dataService">Сервис данных (<c>null</c>, если нужно использовать стандартный).</param>
/// <exception cref="InvalidOperationException">Выбрасывается в том случае, если в системе полномочий произошла ошибка.</exception>
/// <returns>Объект или <c>null</c>, если ничего не было найдено.</returns>
public static Agent GetDbUser(string username, IDataService dataService)
4.
/// <summary>
/// Проверка существования в системе полномочий пользователя с указанным логином.
/// </summary>
/// <param name="login">Логин пользователя.</param>
/// <exception cref="InvalidOperationException">Выбрасывается в том случае, если в системе полномочий произошла ошибка.</exception>
/// <returns>Возвращает <c>true</c> если пользователь существует.</returns>
public static bool IsUserExist(string login)
5.
/// <summary>
/// Создание пользователя в БД подсистемы полномочий
/// </summary>
/// <param name="username">Логин пользователя, возможно с доменом</param>
/// <param name="friendlyUserName">Имя пользователя</param>
/// <returns>Созданный пользователь</returns>
public static Agent CreateDbUser(string username, string friendlyUserName)
6.
/// <summary>
/// Создание пользователя в БД подсистемы полномочий.
/// </summary>
/// <param name="username">Логин пользователя, возможно с доменом.</param>
/// <param name="friendlyUserName">Имя пользователя.</param>
/// <param name="addDefaultRoles">Следует ли добавлять роли по умолчанию для создаваемого пользователя.</param>
/// <param name="dataService">Сервис данных (<c>null</c>, если нужно использовать стандартный).</param>
/// <returns>Созданный пользователь.</returns>
public static Agent CreateDbUser(string username, string friendlyUserName, bool addDefaultRoles, IDataService dataService)
7.
/// <summary>
/// Создание пользователя в БД подсистемы полномочий
/// (имя пользователя берётся из домена)
/// </summary>
/// <param name="username">Логин пользователя, возможно с доменом</param>
/// <returns>Созданный пользователь</returns>
/// <exception cref="Exception">Если пользователь не будет найден в домене, произойдёт исключительная ситуация</exception>
public static Agent CreateDbUser(string username)
using (var context = new PrincipalContext(ContextType.Domain))
{
using (UserPrincipal userPrincipal = UserPrincipal.FindByIdentity(context, username))
{
if (userPrincipal != null)
{
return CreateDbUser(username, userPrincipal.DisplayName);
}
}
}
Особенности использования AuthenticationAdapter
-
При выполнении метода
CreateDbUser
в БД будут добавлены следующие объекты:- Пользователь с привязкой к домену и к ролям, заданным по умолчанию (если соответствующие роли будут найдены в БД полномочий).
- Домен пользователя, если ранее он отсутствовал в системе полномочий.
-
Задание ролей по умолчанию происходит в конфиге приложения:
<configuration>
<appSettings>
<add key="DefaultRoles" value="Администраторы2, AnonimousUser"/>
<!--...-->
</appSettings>
<!--...-->
</configuration>
Пример использования AuthenticationAdapter
Использовать AuthenticationAdapter можно, например, при событии Page_Load в Site.Master:
protected void Page_Load(object sender, EventArgs e)
{
//...
ApplyTreeViewCookie();
//...
if (AuthenticationAdapter.GetDbUser(Context.User.Identity.Name) == null)
AuthenticationAdapter.CreateDbUser(Context.User.Identity.Name);
//...
fio.Text = Context.User.Identity.Name;
//...
}
Создание пользователя с заполненным паролем
Если при создании пользователя нужно, чтобы его пароль не был равен NULL, то нужно взять исходный код метода 6 и подредактировать его, добавив задание значения пароля. Затем использовать полученный метод для создания пользователей. Например:
public static Agent CreateDbUser(string username, string friendlyUserName, bool addDefaultRoles, IDataService dataService)
{
string login;
string domain = DomainHelper.GetDomainFromFullName(username, out login);
var agent = new Agent
{
Login = login,
Pwd = "5D70C3D101EFD9CC0A69F4DF2DDF33B21E641F6A",
IsUser = true,
Name = friendlyUserName
};
var meth = typeof(AuthenticationAdapter).GetMethod(
"CreateDbAgentWithLinks",
BindingFlags.Static | BindingFlags.NonPublic);
meth.Invoke(null, new object[] { agent, domain, addDefaultRoles, dataService });
return agent;
}