Re[3]: разрешения в приложении
От: nauro Украина  
Дата: 03.05.05 07:47
Оценка: +1
Сразу в лоб не получится. Тебе надо делать что то вроде биндинга. Или реакции на принятие данных контролом. Т.е. когда какой нить контрол принимает данные, ты обрабатываешь это событие, и там уж смотришь че за юзер, какие права и что делать с контролом. А для того чтоб обрабатывать контролы нужна как бы их регистрация. Т.е. Есть какойнить хеш. И если ты хочеш что контрол имел совйства реакцции на права, то его надо тыкнуть в этот хеш, а какой-нить обработчик будет рпеагировать на изменение данных контрола и соответственно обрабатывать этот контрол на предмет доступа. Это общая идея. Конкретной реализации не присутсвует. Пища для размышлений
-----------------------------------------
тут может быть ваша реклама
разрешения в приложении
От: 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
Re: разрешения в приложении
От: BaTReligioN Беларусь  
Дата: 29.04.05 23:58
Оценка:
Здравствуйте, Gmoorick, Вы писали:

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


skip

G>[/c#]

G>Вроде это все должно работать, только мне не нравиться решение (слишком громоздкое обьявление, надо добавлять такую функциональность всем контролам системы ) и я не могу придумать ничего лучше. Хочу критику, советы и/или ссылки на готовые решения

А почему тебе не сделать у юзера внутри список групп, к которым он принадлежит? Потом пару методов у юзера, возвращающие что можно пользователю, в зависимости от групп. А где-то на форме сделать вот так:

MyTextBox tb1 = new MyTextBox(dp1);
tb1.Visible = currentuser.CanView;


Или я не до конца понял замысел?
Не относитесь слишком серьезно к жизни, живыми вам все равно из неё не выйти
Re[2]: разрешения в приложении
От: Gmoorick Россия  
Дата: 02.05.05 11:44
Оценка:
Здравствуйте, 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 о том, разрешено ли юзеру выполнять определенное действие.
Re[4]: разрешения в приложении
От: Gmoorick Россия  
Дата: 03.05.05 12:44
Оценка:
Здравствуйте, nauro, Вы писали:

N>Сразу в лоб не получится. Тебе надо делать что то вроде биндинга. Или реакции на принятие данных контролом. Т.е. когда какой нить контрол принимает данные, ты обрабатываешь это событие, и там уж смотришь че за юзер, какие права и что делать с контролом. А для того чтоб обрабатывать контролы нужна как бы их регистрация. Т.е. Есть какойнить хеш. И если ты хочеш что контрол имел совйства реакцции на права, то его надо тыкнуть в этот хеш, а какой-нить обработчик будет рпеагировать на изменение данных контрола и соответственно обрабатывать этот контрол на предмет доступа. Это общая идея. Конкретной реализации не присутсвует. Пища для размышлений


о, спасибо. Будет над чем подумать
Re[4]: разрешения в приложении
От: xasima Беларусь  
Дата: 04.05.05 13:25
Оценка:
Здравствуйте, nauro, Вы писали:

N>Сразу в лоб не получится. Тебе надо делать что то вроде биндинга. Или реакции на принятие данных контролом


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