Mercurial > pub > Impl
view Lib/IMPL/Web/Security.pm @ 245:7c517134c42f
Added Unsupported media type Web exception
corrected resourceLocation setting in the resource
Implemented localizable resources for text messages
fixed TT view scopings, INIT block in controls now sets globals correctly.
author | sergey |
---|---|
date | Mon, 29 Oct 2012 03:15:22 +0400 |
parents | 23daf2fae33a |
children | 63709a4e6da0 |
line wrap: on
line source
package IMPL::Web::Security; use strict; use IMPL::Security::Auth qw(:Const); use IMPL::declare { require => { Exception => 'IMPL::Exception', NotImplementedException => '-IMPL::NotImplementedException', SecurityContext => 'IMPL::Security::AbstractContext' }, }; use constant { ERR_NO_SUCH_USER => -1, ERR_NO_SEC_DATA => -2, ERR_NO_AUTHORITY => -3, ERR_NO_SEC_CONTEXT => -4, ERR_AUTH_FAIL => -5 }; sub AuthUser { my ($this,$name,$package,$challenge) = @_; my $user = $this->FindUserByName($name) or return { status => AUTH_FAIL, code => ERR_NO_SUCH_USER }; my $auth; if ( my $secData = $user->GetSecData($package) ) { $auth = $package->new($secData); } else { return { status => AUTH_FAIL, code => ERR_NO_SEC_DATA, user => $user }; } return { status => AUTH_FAIL, code => ERR_NO_SEC_CONTEXT } unless SecurityContext->current; return { status => AUTH_FAIL, code => ERR_NO_AUTHORITY } unless SecurityContext->current->authority; my $status = SecurityContext->current->authority->InitSession( $user, [$user->roles], $auth, $challenge ); return { status => $status, code => ($status == AUTH_FAIL ? ERR_AUTH_FAIL : 0), user => $user }; } sub Logout { my ($this) = @_; my $session = SecurityContext->current; if($session && $session->authority) { $session->authority->CloseSession($session); $this->CloseSession($session); } } sub FindUserByName { die NotImplementedException->new(); } sub CreateSession { die NotImplementedException->new(); } sub GetSession { die NotImplementedException->new(); } sub SaveSession { die NotImplementedException->new(); } sub CloseSession { die NotImplementedException->new(); } 1; __END__ =pod =head1 NAME C<IMPL::Web::Security> Модуль для аутентификации и авторизации веб запроса. =head1 DESCRIPTION Текущий модуль обеспечивает функции верхнего уровня для работы с системой безопасности. Поскольку модуль является абстрактым, конкретные функции хранения и реализацию объектов модели безопасности должно обеспечить само приложение. Сама система безопасности в веб приложении состоит из двух частей =over =item Модель системы безопасности Предоставляет такие объкты безопасности, как пользователь, сессия роль, определяет правила проверки прав доступа субъекта к объекту. =item Модуль безопасности Как правило встраивается в транспортный уровеь в виде обработчика C<IMPL::Web::Handler> и реализует непосредственно протокол аутентификации и обмена с пользователем. Также модуль безопасности использует модель для хранения сессий и данных аутентификции. Контекст безопасности создается именно этим модулем. =back =head1 MEMBERS =head2 C<AuthUser($name,$package,$challenge)> Инициирует создание новой сессии используя провайдера безопасности текущего контекста безопасности. =over =item C<$name> Имя пользователя, которое будет использоваться при поиске его в БД. =item C<$package> Имя модуля аутентификации, например, C<IMPL::Security::Auth::Simple>. =item C<$challenge> Данные, полученные от клиента, которые будут переданы модулю аутентификации для начала процесса аутентификации и создания сессии. =back Функция возвращает хеш с элементами =over =item C<status> Статус аутентификации - отражает общее состояние процесса ацтентификации, =over =item C<AUTH_FAIL> Аутентификация неудачная, сессия не создана. =item C<AUTH_INCOMPLETE> Аутентификация требует дополнительных шагов, сессия создана, но еще не доверена. =item C<AUTH_SUCCESS> Аутентификация успешно проведена, сессия создана. =back =item C<code> =back =cut