разрешения в приложении
От: Gmoorick Россия  
Дата: 29.04.05 13:33
Оценка:
Вот пытаюсь создать достаточно большую БД. Некоторые контролы должны менять свое поведение в зависимости от того, к какой группе принадлежит текщий юзер ( группы не виндовые — я сам их определяю ). То, что есть сейчас:

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
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.