Сохранение данных пользователя Loggedin из пользовательского интерфейса и их использование в методах BL - PullRequest
1 голос
/ 30 сентября 2011

Я работаю в системе управления документами.Пользователи, определенные в базе данных, могут создавать / манипулировать своими собственными документами на основе определенных им прав доступа.Владелец документа может разрешить другому пользователю получить доступ к документу / изменить его (хранится в виде контекста XML).Мне нужно авторизовать пользователя LoggedIn всякий раз, когда документ открывается для редактирования.Документ уже имеет свойства CreatedBy, EditingUser.

Существует вероятность того, что документ, принадлежащий пользователю "A", может быть отредактирован пользователем "B", если у него есть доступ для записи для этого документа.Теперь мне нужно проверить авторизацию пользователя LoggedIn для документа, который открыт для редактирования (внутри BL-метода Save () объекта DocumentManager).Здесь мне нужно получить доступ к деталям пользователя LoggedIn внутри метода BL, который заполняется после процесса входа в систему (который не должен изменяться после этого).

Мое приложение - приложение WPF.Итак, каков наилучший подход к такой ситуации?Мне нужно часто проверять права пользователя Loggedin на Документ в моем приложении (особенно внутри методов BL).

Ответы [ 2 ]

1 голос
/ 30 сентября 2011

Я бы предпочел механизм развязки для авторизации пользователей. Таким образом, фактическое приложение не должно беспокоиться об авторизации.

Вы можете определить логику авторизации политикой - XACML.

XACML является стандартом де-факто для авторизации.

Как только вы определите логику авторизации в XACML PDP - перед выполнением действий пользователя ваше приложение вызовет XACML PDP - и спросит, имеет ли зарегистрированный пользователь право выполнять это действие с данным ресурсом.

Использование XACML даст вам гибкость в изменении логики авторизации, даже не касаясь логики приложения.

Также - вы можете определить очень детальные правила с помощью XACML.

0 голосов
/ 30 сентября 2011

Вы должны принять сессионный подход. Вы должны поддерживать статический класс, как показано ниже. Когда пользователь вошел в систему, вам нужно добавить его в список на BLL

public static class Session{
     public static Dictionary<User, DateTime> loggedInUser;    
     public static Add(User user){
         loggedInUser.Add(user, DateTime.Now);
         // raise event user arrival
     }

     public static GetUser(int Id){
         // fetch user;
     }

     public static Remove(User user){
        loggedInUser.Removed(user);
        // raise event user left
     }

     // TODO: add timer to check itself. If not activity done in past n minutes, 
     //log him out
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...