Доброго времени суток.
Столкнулся со следующими проблемами.
Есть некоторая система, работающая по следующему принципу:
База данных (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 и выполняет ее). Фактически теперь каждый думает, что он сохранил объект и у него актуальное состояние. Как в этом случае сделать синхронизацию? Чтобы по крайней мере у других пользователей отобразились необходимые изменения?
Заранее спасибо за помощь