powered by simpleCommunicator - 2.0.57     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Доступ к контролам на клиенте
7 сообщений из 7, страница 1 из 1
Доступ к контролам на клиенте
    #38139416
Фотография vah
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скажите пожалуйста, как организовать доступ к контролам на форме в зависимости от роли пользователя? Контролы разные. Ролей всего две, но это не важно...


Заранее благодарен.
...
Рейтинг: 0 / 0
Доступ к контролам на клиенте
    #38140893
Фотография _=ДОБРЫНЯ=_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если тупо в лоб, то что-то типа:
роли 2 - значит Enm.

public enum_rigth as enum
роль_№1 = 1
роль_№2 = 2
end enum

и в процедуре формы Load прописать типа:
if роль=enum_rigth.роль_№1 then
имя_контрола1.Visible=false
elseif роль=enum.роль_№2 then
имя_контрола2.Visible=false
ebdif
...
Рейтинг: 0 / 0
Доступ к контролам на клиенте
    #38140962
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_=ДОБРЫНЯ=_,

ну это уж совсем грубо

Привязать свойства Visible и Enabled куда-нибудь, это хоть протестировать можно будет.
Можно так поизвращаться, например
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
	public RoleManager rh= new RoleManager(false,false);

      	public Form1()
        {             
            InitializeComponent();
            textBox1.DataBindings.Add("Visible", rh, "role1and2");
            label1.DataBindings.Add("Visible", rh, "role1or2");
            checkBox1.DataBindings.Add("Enabled", rh, "role1");
            button3.DataBindings.Add("Enabled", rh, "role2");
        }
...


    public class RoleManager : INotifyPropertyChanged
    {
        private bool _role1;
        private bool _role2;
        public RoleManager(bool p1, bool p2)
        {
            role1 = p1;
            role2 = p2;
        }
        public bool role1
        {
            get { return _role1; }
            set
            {
                _role1 = value;
                InvokePropertyChanged(true, false);
            }
        }
        public bool role2
        {
            get { return _role2; }
            set
            {
                _role2 = value;
                InvokePropertyChanged(false, true);
            }
        }
        public bool role1and2 { get { return _role1 && _role2; } }
        public bool role1or2 { get { return _role1 || _role2; } }
        public event PropertyChangedEventHandler PropertyChanged;
        public void InvokePropertyChanged(bool p1, bool p2)
        {
            PropertyChangedEventArgs e;
            PropertyChangedEventHandler handler = PropertyChanged;
            if (handler != null)
            {
                if (p1)
                {
                    e = new PropertyChangedEventArgs("role1");
                    handler(this, e);
                }
                if (p2)
                {
                    e = new PropertyChangedEventArgs("role2");
                    handler(this, e);
                }
                e = new PropertyChangedEventArgs("role1and2");
                handler(this, e);
                e = new PropertyChangedEventArgs("role1or2");
                handler(this, e);
            }
        }
    }


...
Рейтинг: 0 / 0
Доступ к контролам на клиенте
    #38141461
LameUser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vahСкажите пожалуйста, как организовать доступ к контролам на форме в зависимости от роли пользователя? Контролы разные. Ролей всего две, но это не важно...


Заранее благодарен.

Не зная целиком задачи - в вашем случае сделал бы базовую форму,в которой при Load запускался бы модуль безопасности, который посредством Reflection (можно и через Controls) получал все контролы на форме - далее бы выдавал им Visible, или Enabled в соответствии с настройками текущей роли пользователя. Тут уже можно хоть сколько ролей делать. Тебе еще нужно эти настройки доступа где-то хранить - в базе к примеру, если таковая имеется. Так же модуль безопасности должен уметь просканировать все формы приложения и добавлять новые контролы, которых нет в настройках (при разработке новых форм, чтобы ты руками ничего в хранимые настройки не скидывал). Привязываться можно к Form.Name + Control.Name, с оговоркой в будущем не менять имя контролов, или менять и знать что в сохраненных настройках надо будет обновить Control.Name
...
Рейтинг: 0 / 0
Доступ к контролам на клиенте
    #38143000
Фотография _=ДОБРЫНЯ=_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LameUservahСкажите пожалуйста, как организовать доступ к контролам на форме в зависимости от роли пользователя? Контролы разные. Ролей всего две, но это не важно...


Заранее благодарен.

Не зная целиком задачи - в вашем случае сделал бы базовую форму,в которой при Load запускался бы модуль безопасности, который посредством Reflection (можно и через Controls) получал все контролы на форме - далее бы выдавал им Visible, или Enabled в соответствии с настройками текущей роли пользователя. Тут уже можно хоть сколько ролей делать. Тебе еще нужно эти настройки доступа где-то хранить - в базе к примеру, если таковая имеется. Так же модуль безопасности должен уметь просканировать все формы приложения и добавлять новые контролы, которых нет в настройках (при разработке новых форм, чтобы ты руками ничего в хранимые настройки не скидывал). Привязываться можно к Form.Name + Control.Name, с оговоркой в будущем не менять имя контролов, или менять и знать что в сохраненных настройках надо будет обновить Control.Name

Поддерживаю, но я бы сделал чуть иначе. сканировать все контролы - затратно по времени при загрузке формы, если к примеру контролов более 100 и они все разбросаны по вкладкам или контейнерам. Лучше хранить в базе те контролы которые нужно блокировать или скрыть. В load формы через Controls.Find() искать именно те которые нужно блокернуть. Ну а если изменили название - то это на совести разработчика. Значит ему придется по новой указывать на этот контрол блокировку.
...
Рейтинг: 0 / 0
Доступ к контролам на клиенте
    #38145756
Фотография pation
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_=ДОБРЫНЯ=_Поддерживаю, но я бы сделал чуть иначе. сканировать все контролы - затратно по времени при загрузке формы, если к примеру контролов более 100 и они все разбросаны по вкладкам или контейнерам. Лучше хранить в базе те контролы которые нужно блокировать или скрыть. В load формы через Controls.Find() искать именно те которые нужно блокернуть. Ну а если изменили название - то это на совести разработчика. Значит ему придется по новой указывать на этот контрол блокировку.

обращение к базе намного затратнее сканирования всех контролов, особенно если речь идет не десктопе
...
Рейтинг: 0 / 0
Доступ к контролам на клиенте
    #38145852
Фотография _=ДОБРЫНЯ=_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pation_=ДОБРЫНЯ=_Поддерживаю, но я бы сделал чуть иначе. сканировать все контролы - затратно по времени при загрузке формы, если к примеру контролов более 100 и они все разбросаны по вкладкам или контейнерам. Лучше хранить в базе те контролы которые нужно блокировать или скрыть. В load формы через Controls.Find() искать именно те которые нужно блокернуть. Ну а если изменили название - то это на совести разработчика. Значит ему придется по новой указывать на этот контрол блокировку.

обращение к базе намного затратнее сканирования всех контролов, особенно если речь идет не десктопе
Зная имя формы - обращение происходит один раз. По вернувшемуся результату быстро пробегаем и ищем контрол. если нашли, то из этого же вырнувшегося результата смотрим и устанавливаем поведение контрола.
Хочу так же добавить - если к примеру какое-то поведение контрола уже не нужно - то удаляем эту строчку физически из БД.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Доступ к контролам на клиенте
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]