Роли пользователей и Presentation Level.
От: Барышников Кирилл Киргизия  
Дата: 13.07.07 14:38
Оценка:
Доброго времени суток.
Столкнулся со следующими проблемами.

Есть некоторая система, работающая по следующему принципу:

База данных (SQL Server), в которой настроены роли пользователей (Role1, Role2, ...)

Бизнес объекты.

А также dal слой для конструирования бизнес объектов и сохранения состояний.

Все это реализовано на клиенте. Сервером выступает сам SQL Server — клиентское приложение самостоятельно формирует запросы и отсылает их на сервер для выполнения.

Возникли следующие трудности:

1. Как работать с ролями пользователей на уровне бизнес логики? Например у нас есть таблица Table1. Есть 4 роли: tblInsert, tblUpdate, tblSelect, tblDelete, которые соответственно разрешают выполнение операций по добавлению, чтению и модификации данных в таблице. Сейчас все роли получаются через da слой и преобразуются к статическому перечислению
Теперь при выполнении операций над каким — то бизнес объектом мне требуется запретить отображение тех функций, на которые у пользователя нет прав. Сейчас это сделано в следующем виде:

 if (User.UserRole == UserRole.RoleA)
 {
    // отобразить пункты меню, характерные для роли RoleA
 }

 if (User.UserRole == UserRole.RoleB)
 {
    // отобразить пункты меню, характерные для роли RoleB
 }


Сейчас уже понял, что такой подход неудобен следующим — а именно привязкой к текущей системе безопасности на сервере. Если на таблицы будут наложены новые ограничения — то придется переписывать огромный кусок однородного кода. А пользователи старых приложений будут получать исключения вида "Update Permission Denied"

2. Синхронизация данных
Вторая трудность синхронизация данных.
Допустим два пользователя загружают один и тот же бизнес объект и работают с ним. Потом каждый сохраняет его (подготавливает команду Update и выполняет ее). Фактически теперь каждый думает, что он сохранил объект и у него актуальное состояние. Как в этом случае сделать синхронизацию? Чтобы по крайней мере у других пользователей отобразились необходимые изменения?


Заранее спасибо за помощь
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.