Вот пытаюсь создать достаточно большую БД. Некоторые контролы должны менять свое поведение в зависимости от того, к какой группе принадлежит текщий юзер ( группы не виндовые — я сам их определяю ). То, что есть сейчас:
class UserInfo
{
//тут просто инфа о юзере
...
// тут просто лезем в БД или hash и смотрим разрешено ли группе, в которой находится пользователь, и даем ответ
bool MayView( PermissionGroup );
bool MayAddNew( PermissionGroup );
bool MayDelete( PermissionGRoup );
bool MayEdit( PermissionGroup );
}
public enum PermissionType
{
View = 0,
Edit,
Delete,
Add
}
//Класс, который хранит возможные действия контрола, типа если кнопка может вызвать форму, которая будет просматривать данные из
//Group1, тогда нужно кнопке добавить (Group1,MayView)
public class PermissionsContainer
{
public void Add( PermissionGroup, PermissionType );
// Для всех пар (PermissionGroup,PermissionType) запрашивает разрешение из UserInfo
// положительный ответ будет дан если есть хоть одно разрешение на чтение
public bool checkForViewing();
public static DataPermissionsContainer operator+(DataPermissionsContainer left,
DataPermissionsContainer right)
}
//ну а теперь сам контрол
public MyTextBox:TextBox
{
.....
public Button(PermissionContainer)
{
CheckPermissions();
};
public DataPermissionContainer SetPermission
{
get{ return this.dp }
set{ this.dp = value};
}
public void CheckPermissions()
{
if( this.MayView==false)
this.enabled = false;
if ( this.MayEdit)
this.readonly = true;
//и т.д.
}
}
//гдето в форме будет так
{
....
DataPermissionContainer dp1 = new DataPermissionContainer();
dp.Add(Group1, MayView);
dp.Add(Group1, MayEdit);
MyTextBox tb1 = new MyTextBox(dp1);
MyTextBox tb2 = new MyTextBox(dp1);
DataPermissionContainer dp2 = new DataPermissionContainer();
dp2.Add(Group2, MayView);
dp2.Add(Group2,MayEdit);
tb2.SetPermission += dp2;
}
Вроде это все должно работать, только мне не нравиться решение (слишком громоздкое обьявление, надо добавлять такую функциональность всем контролам системы ) и я не могу придумать ничего лучше. Хочу критику, советы и/или ссылки на готовые решения
03.05.05 13:09: Перенесено модератором из '.NET GUI' — AndrewVK