ASP.NET MVC => Сеанс пользователя / Cookie / Общение с сервисами - PullRequest
0 голосов
/ 25 ноября 2011

Я не уверен, правильно ли я это делаю, но просто хотел знать, как обращаться с loggedonuser в моей системе.

Требования

* Пользователь войдет в систему с CompanyID, UserID и паролем

* Мы проверяем, может ли пользователь войти в систему, если это так

* Мы храним CompanyID и UserID внутри куки, чтобы loggedonuser мог получить доступ к областям нашего сайта, мы делаем много звонков в БД, которые требуют как компании, так и пользователя

Вопрос: Как мне связаться с зарегистрированным пользователем во всех моих службах?

Мой код - чтобы вы знали, что я делаю:

public interface IUserSession
{
    void SetClientStore(string LoginID, string Identifier); //store in cookie
    void Logout();
    string LoginID { get; private set; } //in cookie
    string CompanyIdentifier { get; private set; } //in cookie

}

public interface IAuthorizationService
{
    bool AuthenticateUser(string Identenfier, string LoginID, string password);
}

public class HandleAuthentication
{
    private readonly IUserSession _session;
    private readonly IAuthorizationService _auth;

    public HandleAuthentication(IUserSession session,
                                IAuthorizationService auth)
    {
        _session = session;
        _auth = auth;
    }

    public void AuthenticationUser(string Identenfier, string LoginID, string password)
    {
        if (_auth.AuthenticateUser(Identenfier, LoginID, password))
            _session.SetClientStore(LoginID, Identenfier);
        else
            _session.Logout();
    }

Должен ли я получить текущего пользователя в моем базовом контроллере и передать его везде? Так что все мои сервисы не зависят от интерфейса ??

Итак, в моем базовом контроллере я создаю свойство с именем:

public UserProfile MyProfile {get {return //something here;}}

затем отправьте это свойство любой службе, используйте это свойство в любых вызовах БД и т. Д. UserProfile будет строго типизированным объектом.

1 Ответ

0 голосов
/ 25 ноября 2011

Вы можете сохранить любую дополнительную информацию в части userData куки аутентификации, как показано в в этом примере . Затем вы будете использовать пользовательский принципал, который будет вставлен в свойство User, доступное везде, где у вас есть HttpContext. Таким образом, в действиях контроллера у вас будет доступ к свойству User (возможно, у вас может быть базовый контроллер, который будет предоставлять строго типизированную версию его пользовательскому субъекту), а затем передавать информацию в бэк-офисные службы.

...