Здравствуйте, BaTReligioN, Вы писали:
BTR>Здравствуйте, Gmoorick, Вы писали:
G>>Вот пытаюсь создать достаточно большую БД. Некоторые контролы должны менять свое поведение в зависимости от того, к какой группе принадлежит текщий юзер ( группы не виндовые — я сам их определяю ). То, что есть сейчас:
BTR>skip
G>>
G>>Вроде это все должно работать, только мне не нравиться решение (слишком громоздкое обьявление, надо добавлять такую функциональность всем контролам системы ) и я не могу придумать ничего лучше. Хочу критику, советы и/или ссылки на готовые решения
BTR>А почему тебе не сделать у юзера внутри список групп, к которым он принадлежит? том пару методов у юзера, возвращающие что можно пользователю, в зависимости от групп. А где-то на форме сделать вот так:
Т.е. вот так:
BTR>MyTextBox tb1 = new MyTextBox(dp1);
BTR>tb1.Visible = currentuser.CanView;
делать не получиться, потому что мы не знаем, какие данные tb1 просматривает...
BTR> Или я не до конца понял замысел?
Видимо не доконца. Система примерно такая, я разделил БД на несколько групп ( DataGroup ), так чтобы на каждую группу можно было установить разрешения для каждой UserGroup. Т.е. вот есть у меня виртуальная группа данных AdressBook, и я задаю разрешения в своей бд примерно так:
AdressBook — CanView — All
AdressBook — CanEdit — Secretars
ADressBook — CanAdd — Secretars
AdressBook — CanDelete — Admins
есть еще связка User, UserGroup.
В программе этой связкой занимается UserInfo, c помощью св-ств аля
bool CanView ( DataGroup );
т.е. я всегда могу получить разрешения на юзера так:
UserInfo curUser = new UserInfo.Instance;
if( curUser.CanView(AdressBook ) )
MessageBox.Show( " Можно смотреть " ) ;
Далее, изза чего все заморочки. 1 конрол на форме может влиять на несколько DataGroup, поетому ему надо определить, что именно и с какой DataGroup он делает.Это я определяжю с помощью DataPermissions. Потом этот самый контрол будет на основы данных в DataPermissions запрашивать UserInfo о том, разрешено ли юзеру выполнять определенное действие.