powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Разработка информационных систем [игнор отключен] [закрыт для гостей] / Формирование интерфейса в заисимоти от привилегий
70 сообщений из 70, показаны все 3 страниц
Формирование интерфейса в заисимоти от привилегий
    #35048205
Фотография Denis.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет. Передомной стоит задача: отображать гуй в зависимости от прав юзера(прятать\дизейблить контролы). Тостый клиент. Гуи - отображение селетов из вьюшек. СУБД - оракл. Клиент не может коннектиться под системом. Просьба подсказать решение\паттерн\литературу как это умно реализовать. Заранее большое спасибо.
...
Рейтинг: 0 / 0
Формирование интерфейса в заисимоти от привилегий
    #35048428
Vetic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
попробуй методу описанную здесь тыц
...
Рейтинг: 0 / 0
Формирование интерфейса в заисимоти от привилегий
    #35051893
Lepsik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у меня построено в xml контролов - и в зависиомти от условий я меняю или язык или степень доступности - очень удобно и просто.

В контуркторе каждой формы ставишь вызов проверки всехусловий и аттрибутов формы
...
Рейтинг: 0 / 0
Формирование интерфейса в заисимоти от привилегий
    #35051942
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lepsikу меня построено в xml контролов - и в зависиомти от условий я меняю или язык или степень доступности - очень удобно и просто.

В контуркторе каждой формы ставишь вызов проверки всехусловий и аттрибутов формы
если коннект из другой проги, то полные права?
...
Рейтинг: 0 / 0
Формирование интерфейса в заисимоти от привилегий
    #35060106
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Формирование интерфейса в заисимоти от привилегий
    #35060440
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Denis.
> ... отображать гуй в зависимости от прав юзера ...

Допустим, что Вы можете разбить (сгруппировать) ресурсы (прятать\дизейблить контролы) на группы и число получившехся групп <2K (например). За каждой группой закрепляете один бит. Биты группируются в линейку (256 байт). Линейка - поле в таблице клиентов.
При авторизации клиента, клиентское приложение получает битовую линейку. В поле Tag (например) пишешь индекс группы доступа. Если бит в линейке с индексом группы = 0, то прячешь\дизейблируешь контрол.

С уважением, Владимир.
...
Рейтинг: 0 / 0
Формирование интерфейса в заисимоти от привилегий
    #35061569
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев
За каждой группой закрепляете один бит. Биты группируются в линейку (256 байт).
сейчас биты никто несчитает. Наоборот, в ООП за командой назначают класс Команда (шаблон программирования Command). И т.д.
У всех методов здесь один недостаток - безоп.на клиенте ущербна тем, что сервер ей незанимается.
Зайди на Access'e в БД и увидишь всё без контролов.
...
Рейтинг: 0 / 0
Формирование интерфейса в заисимоти от привилегий
    #35062320
ModelR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Зайди на Access'e в БД и увидишь всё без контролов.Верно, но даже при полной серверной защите есть еще вопрос юзабилити - зачем пользователю давать возможность нажимать кнопку, по которой он заведомо получит фигвам?
...
Рейтинг: 0 / 0
Формирование интерфейса в заисимоти от привилегий
    #35062622
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ModelR Petro123Зайди на Access'e в БД и увидишь всё без контролов.Верно, но даже при полной серверной защите есть еще вопрос юзабилити - зачем пользователю давать возможность нажимать кнопку, по которой он заведомо получит фигвам?
я не люблю прыгающих-появляющихся кнопок ( за редким исключением ). Прога ведёт себя "в угадайку".
IMHO
Я за "серенькие" кнопки и за "... Ничего не выделено (с Фотошоп)"
...
Рейтинг: 0 / 0
Формирование интерфейса в заисимоти от привилегий
    #35062635
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и потом, редко бывает ОДНА форма для разных функ.рабочих мест с кучей ДА-НЕТ контролов.
______________________________________________
Вы имеете право хранить молчание! Всё что Вы скажете может быть использовано против Вас в суде!
...
Рейтинг: 0 / 0
Формирование интерфейса в заисимоти от привилегий
    #35063600
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Petro123
>сейчас биты никто несчитает... безоп.на клиенте ущербна тем ...

>ModelR
> ... зачем пользователю давать возможность ...

В схеме прототипа ( здесь ) эти требования разрешены так:
1. Клиенты всех типов (администраторы, гости, обычные) определены в системе вместе с их правами (есть запись в таблице клиентов, включающяя 128 байтов поля binary - на данный момент- права)
2. Клиент любого типа может открыть любое (были бы ресурсы) число сессий.
3. Сессия строится так,- клиентское приложение посылает информацию аутентификации серверу приложений СП (используется ассимметрино-симметричная криптография) и если всё хорошо, то СП создаёт сессиию - запись в таблицу сессий - и передает права клиентскому приложению. Эти же права находятся и в клиентской сессионной записи.
4. Клиентское приложение анализируя линейку прав, управляет контролами.
5. Для выполнения операций с данными, клиентское приложение, посылает сообщение-запрос серверу приложения (индекс_сессии+индекс_класса + индекс_метода_в_классе + сериализованные_параметры). Анализируя запрос СП читает и права клиента из поля записи таблицы сессий. Если выполнение данного типа запроса запрещено, то клиент получит не штатную ситуацию.

С уважением, Владимир.
...
Рейтинг: 0 / 0
Формирование интерфейса в заисимоти от привилегий
    #35064357
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев топик был о простых решениях.
У Вас, же сервер нивелирован 3-х звенкой до простого скопища файлов для среднего звена.

______________________________________________
Вы имеете право хранить молчание! Всё что Вы скажете может быть использовано против Вас в суде!
...
Рейтинг: 0 / 0
Формирование интерфейса в заисимоти от привилегий
    #35065963
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Petro123
> ... сервер нивелирован 3-х звенкой до простого скопища файлов ...
Лихо Вы однако. Ну срезали.
Но ... функциональные возможности работы системы с данными, с точки зрения клиента, определяются совокупным множеством методов различных классов. Группируем эти методы и отбражаем на битовую линейку (индекс_класса,индекс_метода) --> номер_бита_линейки. Если клиент имеет соответствующее право, то имеет соответствующий бит линейки в 1. Что может быть проще?

С уважением, Владимир.
...
Рейтинг: 0 / 0
Формирование интерфейса в заисимоти от привилегий
    #35066016
ренегат
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Denis.Всем привет. Передомной стоит задача: отображать гуй в зависимости от прав юзера(прятать\дизейблить контролы). Тостый клиент. Гуи - отображение селетов из вьюшек. СУБД - оракл. Клиент не может коннектиться под системом.
Ну нифигасебе заявляения ;))))) Хотел бы я посмотреть на эту чудо систему, у которой SYSTEM
задействован как либо. Хорошо хоть не под SYS табличги создаете, право.

Denis.Просьба подсказать решение\паттерн\литературу как это умно реализовать. Заранее большое спасибо.
Нет тут никакой умной литературы.

А есть - нудная и трудоемкая работа, без которой - ну никак. Называется - привязка визуальных
контролов к правам (права же - это просто табличка, результат запроса, хоть из какого источнега).

Вот сидишь, и рисуешь, насколько ума у платформы хватит. Или enabled/disabled visible/unvisible на
кожен контрол вручную, или какой доработкой базовых контролов и форм, так шоп всех накрыть
одним точечным ударом (т.е. строкой кода).

В общем - как ни крути, но особого ума на всё это не надо - главное не забыть, что визиблинг и
энейблинг можно похакать очень даже легально через какой WinAPI - потому секьюрити нужно
всенепременно дублировать на серверном уровне.

Удачи.
...
Рейтинг: 0 / 0
Формирование интерфейса в заисимоти от привилегий
    #35066323
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ренегат +1
ВМоисеев>Petro123
> ... сервер нивелирован 3-х звенкой до простого скопища файлов ...
Лихо Вы однако. Ну срезали.
Но ... функциональные возможности работы системы с данными, с точки зрения клиента,

====== ты забыл, что клиент не Маша, а программист-прикладник в данном контексте

определяются совокупным множеством методов различных классов.

====== +

Группируем эти методы и отбражаем на битовую линейку (индекс_класса,индекс_метода) --> номер_бита_линейки.

====== - зачем? Может от ЯП высго уровня на машинный язык передём?

Если клиент имеет соответствующее право, то имеет соответствующий бит линейки в 1. Что может быть проще?

==== проще дефки за окном


С уважением, Владимир.
программисты давно разделились на системщиков и прикладников.
Для вторых биты, указатели, указатели на указатели, как бы не очень нужны.
Определись, что ты в первом эшелоне и пиши продукты подстать MyBD, MyAppServer, My_Traffik, ...

ЗЫ.
"Сложнее всего в мире достигнуть простоты - это крайняя граница опыта и последнее усилие гения".
George Sand.
...
Рейтинг: 0 / 0
Формирование интерфейса в заисимоти от привилегий
    #35067406
Фотография DVE
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1.Роли и доступы как обычно.
2.На уровне бд реализуем граф (вершины, переходы)

по факту перехода в вершину отрабатывает процедура которая смотрит права доступа и возвращает на клиен инструкции по интерфейсу и процедуру при подтверждении. Ну а там на любом IDE создаем интерфейсы по "инструкциям"


В результате получаем что то типа Визардов.

огромный плюс в том, что если все продумать то можно уже будет особо не программировать, знай себе пиши переходы и процедурки и доступа правильно раздавай
...
Рейтинг: 0 / 0
Формирование интерфейса в заисимоти от привилегий
    #35067636
Фотография Denis.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, господа, а нет ли идей как сделать так, чтобы кнопки дизэйблились автаматически? К примеру на кнопке весит селект из вьюшки, в онлоаде прога проверяет есть ли доступ к данной вьюшке, и если его нет, то дизейблим контрол и к примеру сделать таблицу соответствия вьюшек и контролов, чтото в этом духе...?(или полное г?).
Вопрос в основном дотнетчикам: как думаете XAML поможет мне в решении данного вопроса?(Формирование интерфейса в заисимоти от привилегий)
...
Рейтинг: 0 / 0
Формирование интерфейса в заисимоти от привилегий
    #35067666
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Denis.
К примеру на кнопке весит селект из вьюшки, в онлоаде прога проверяет есть ли доступ к данной вьюшке, и если его нет, то дизейблим контрол
не в этом проблема :)
Код: plaintext
1.
2.
3.
4.
try
  Query.Open
except // нет прав
  Кнопка.Засерься :))
end;
...
Рейтинг: 0 / 0
Формирование интерфейса в заисимоти от привилегий
    #35067670
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
на XAML данный код наверно длиннее и изящнее )))
______________________________________________
Вы имеете право хранить молчание! Всё что Вы скажете может быть использовано против Вас в суде!
...
Рейтинг: 0 / 0
Формирование интерфейса в заисимоти от привилегий
    #35067735
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123
Код: plaintext
1.
2.
3.
4.
try
  Query.Open
except // нет прав
  Кнопка.Засерься :))
end;

скорее система максимум через полсекунды засерится, от таких проверок :)
...
Рейтинг: 0 / 0
Формирование интерфейса в заисимоти от привилегий
    #35067877
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iscrafm и правильно, т.к. у засранцев нет прав (нельзя узнать: "есть ли в магазине хлеб?" - не сходив туда)
:)
______________________________________________
Вы имеете право хранить молчание! Всё что Вы скажете может быть использовано против Вас в суде!
...
Рейтинг: 0 / 0
Формирование интерфейса в заисимоти от привилегий
    #35067903
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
неее.. загнется у правильных людей... кто его знает, что в том запросе и сколько он будет пытаться открыться. И то каждый раз на обновление акций или чего-то там подобного. :)
...
Рейтинг: 0 / 0
Формирование интерфейса в заисимоти от привилегий
    #35068097
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iscrafmнеее.. загнется у правильных людей... кто его знает, что в том запросе и сколько он будет пытаться открыться. И то каждый раз на обновление акций или чего-то там подобного. :)
конечно, есть ньюансы, но идти надо от простого к сложному, а не наоборот. Как сказал "грекси": "все делают ручками - нет универсального на клиенте". Вот в БД есть, в книжках пишут.
....
А то сразу XAML, и такого наворотим....
...
Рейтинг: 0 / 0
Формирование интерфейса в заисимоти от привилегий
    #35068128
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> Как сказал "грекси"

А это кто?
...
Рейтинг: 0 / 0
Формирование интерфейса в заисимоти от привилегий
    #35068425
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Denis.Спасибо, господа, а нет ли идей как сделать так, чтобы кнопки дизэйблились автаматически?
При создании формы (или правильнее даже чуть позже, когда форма полностью инициализируется, но до ее показа, ровно один раз) выполняете селект, который вернет все "запрещенное", потом все это запрещенное запрещаете в зависимости от вида элемента управления и вида запрета.
...
Рейтинг: 0 / 0
Формирование интерфейса в заисимоти от привилегий
    #35068487
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
guest_20040621> Как сказал "грекси"

А это кто?
по степени своей популярности скоро приблизится к Вашей :)

grexhide забаненный
ренегат
...
Рейтинг: 0 / 0
Формирование интерфейса в заисимоти от привилегий
    #35068522
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Васкецов Denis.Спасибо, господа, а нет ли идей как сделать так, чтобы кнопки дизэйблились автаматически?
При создании формы (или правильнее даже чуть позже, когда форма полностью инициализируется, но до ее показа, ровно один раз) выполняете селект, который вернет все "запрещенное", потом все это запрещенное запрещаете в зависимости от вида элемента управления и вида запрета.
на каждый метод есть противометод.
Почему каждый контрол по отдельности должен соединять (а потом разбивать) ОДИН ОБЩИЙ SELECT?.
Ничто не мешает в соответствии ООП каждый контрол "научить" спрашивать в БД "можно ли ему ...".


Захотелось чего-то большого и чистого. Помыл слона. Не то...
...
Рейтинг: 0 / 0
Формирование интерфейса в заисимоти от привилегий
    #35068546
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IMHO
если уж делать, то берём за образец Word - правый клик на палитре инструментов - настроить - список_команд.
Это идентификаторы-команды-константы .
К ним привязывается шаблон-класс-Команда и пункт меню.
Она умеет сериализовать себя в БД и обратно и спросить привилегии.
Она умеет совместно работать с Action-библиотекой чтобы не писать велосипедов.
______________________________________________
Вы имеете право хранить молчание! Всё что Вы скажете может быть использовано против Вас в суде!
...
Рейтинг: 0 / 0
Формирование интерфейса в заисимоти от привилегий
    #35068565
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123, есть два безусловных авторитета. Первый - г-н Дейт. Второй - результаты корректных тестов. Привычка не ссылаться на надписи на заборах (а тем более цитировать их или ссылаться на их авторов (человек, проводящий свободное время в "Просто треп" ("ренегат"), и есть пример такого автора)) - это хорошая привычка.

.
...
Рейтинг: 0 / 0
Формирование интерфейса в заисимоти от привилегий
    #35068577
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Почему каждый контрол по отдельности должен соединять (а потом разбивать) ОДИН ОБЩИЙ SELECT?
Никто ничего не "соединяет" и не "разбивает". Это выглядит схематически как
1) выполняем select, получаем идентификацию компонента и некую идентификацию прав X.
2) для каждой строки выполняем что-нибудь типа FindComponent.
3) говорим тому компоненту, который (если!) нашелся, что ему надо "натянуть" права вида X (X берем из селекта). Для этого либо пишем обработку компонента снаружи, либо элементы управления должны поддерживать некий (свой) интерфейс, либо и то и другое.

Petro123Ничто не мешает в соответствии ООП каждый контрол "научить" спрашивать в БД "можно ли ему ...".
Да ради бога. Только на более низком уровне это не должно выглядеть как поток из сотни селектов в БД при открытии формы.
...
Рейтинг: 0 / 0
Формирование интерфейса в заисимоти от привилегий
    #35068605
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Васкецов мы друг друга поняли.
Насчёт сотни селектов, то Первична команда - DeleteMyObj
Контролы, которые дёргают эту команду - вторичны .

Скока есть команд, столько и SELECT.
Хотя можно пожалеть сервер и сделать класс-менеджерКоманд. Но это спорно и индивидуально.
______________________________________________
Вы имеете право хранить молчание! Всё что Вы скажете может быть использовано против Вас в суде!
...
Рейтинг: 0 / 0
Формирование интерфейса в заисимоти от привилегий
    #35068612
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я ж объяснил - есть наработанные годами шаблоны программирования.
Шаблон Command - там нет велосипедов.
______________________________________________
Вы имеете право хранить молчание! Всё что Вы скажете может быть использовано против Вас в суде!
...
Рейтинг: 0 / 0
Формирование интерфейса в заисимоти от привилегий
    #35068656
ренегат
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Скока есть команд, столько и SELECT.
Хотя можно пожалеть сервер и сделать класс-менеджерКоманд. Но это спорно и индивидуально.
______________________________________________
Вы имеете право хранить молчание! Всё что Вы скажете может быть использовано против Вас в суде!

Глупо. Все права можно запросить одним махом, одним селектом, закатать в массив и гонять уже IsRight(CommandID) по нему. Массив перечитывать при логине (или создании, а то и вовсе показе формы, если параноя жжет). Смешно, но всё же - один селект на 200 значений - это в разы быстрее, чем три селекта на одно значение.

P.S. Мир намного проще, чем кажется.
...
Рейтинг: 0 / 0
Формирование интерфейса в заисимоти от привилегий
    #35068670
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ренегатзакатать в массив и гонять уже IsRight(CommandID) по нему. Массив перечитывать при логине
+1
...
Рейтинг: 0 / 0
Формирование интерфейса в заисимоти от привилегий
    #35068682
ренегат
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Шаблон Command - там нет велосипедов.
Паттерны - жвачка для посредственностей. Наличие название паттерна в имени класса - явный признак ФГМ.
...
Рейтинг: 0 / 0
Формирование интерфейса в заисимоти от привилегий
    #35068697
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ренегат Petro123Скока есть команд, столько и SELECT.
Хотя можно пожалеть сервер и сделать класс-менеджерКоманд. Но это спорно и индивидуально.
______________________________________________
Вы имеете право хранить молчание! Всё что Вы скажете может быть использовано против Вас в суде!

Глупо. Все права можно запросить одним махом, одним селектом, закатать в массив и гонять уже IsRight(CommandID) по нему. Массив перечитывать при логине (или создании, а то и вовсе показе формы, если параноя жжет). Смешно, но всё же - один селект на 200 значений - это в разы быстрее, чем три селекта на одно значение.

P.S. Мир намного проще, чем кажется.
можно (и я сказал про менеджера команд). Тут нет верного решения, как нет однозначного ответа на вопрос:
- коннект на приложение или коннект к БД на каждое окно (dll |..).
- 3-х звенка или нет :)
- AMD - Intel
- ...
...
Рейтинг: 0 / 0
Формирование интерфейса в заисимоти от привилегий
    #35068710
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ренегат Petro123Шаблон Command - там нет велосипедов.
Паттерны - жвачка для посредственностей. Наличие название паттерна в имени класса - явный признак ФГМ.
- название Get в имени метода тоже? :)
- паттерны повышают культуру и отсутствие велосипедов (не гони пургу).
...
Рейтинг: 0 / 0
Формирование интерфейса в заисимоти от привилегий
    #35068798
ренегат
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123- название Get в имени метода тоже? :)
Это лишь банальное соглашение о наименовании.

Petro123- паттерны повышают культуру и отсутствие велосипедов (не гони пургу).
Та щазз.. Скачай DevExpress QuantumGrid6 и посмотри, насколько там всё окультурено.
Ага ага.

Я пытаюсь тебе объяснить несколько другое. Паттерн - это лишь парадигма. Их нужно знать, да,
применять, да, но выстраивать строго от них структуру классов и прочее - это полный бред и
заскоки недоразума. А включать в наименования - это уже явая болезнь головы.

Нет, ну давай в повседневной жизни будем называть вещи "по новому".

Самсунг2202WТелевизорПлоскийШирокий, ПанасоникТелефонПроводной, СтолДеревянныйОфисныйСТубмочками.

ПридурокЗаМониторомЧеловекРазумный.

~

Укотайко
...
Рейтинг: 0 / 0
Формирование интерфейса в заисимоти от привилегий
    #35068933
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ренегат
Я пытаюсь тебе объяснить несколько другое. Паттерн - это лишь парадигма. Их нужно знать, да,
применять, да, но выстраивать строго от них структуру классов и прочее - это полный бред и
заскоки недоразума. А включать в наименования - это уже явая болезнь головы.

- ты хоть и башковитый и я тебя уважаю, но бывает ищещь ведьм там где их нет :)).

- расшифруй понятие "строго"
...
Рейтинг: 0 / 0
Формирование интерфейса в заисимоти от привилегий
    #35068943
ренегат
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123- расшифруй понятие "строго"

Слово Factory минимум в половине имён классов? Есть! (с) WTF
...
Рейтинг: 0 / 0
Формирование интерфейса в заисимоти от привилегий
    #35069019
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ренегат Petro123- расшифруй понятие "строго"

Слово Factory минимум в половине имён классов? Есть! (с) WTF
любовь зла, полюбишь и .....
Неинтересно спорить про любовь.
Хорошо что, есть разные технические решения на любой вкус программиста. :)
Удачи (тебе и автору топика).
...
Рейтинг: 0 / 0
Формирование интерфейса в заисимоти от привилегий
    #35069763
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Petro123
>Для вторых биты, указатели, ...

Хоть убей, но не могу Вас понять, - чем это Вы. Типы bool, int, byte, byte[], enum и поля типа binary(?) никто кроме Вас, похоже не отменял.
Далее, права пользователя хранятся в поле binary записи сессии. Отобразить binary на byte[] можно так (для MS SQL) :
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
 ...
 byte[] cmd = new byte[ 256 ]; //-- Определяется размером поля binary с правами
 ...
 sdr = cmm.ExecuteReader(); //-- Получим идентификационную запись пользователя или пусто
 if (!sdr.Read()) throw null;
  //-- Формируем параметры сессии клиента
  idxCatch =  3 ; //-- Ошибка формирования выходных параметров 
  idxКлиент = (Guid)sdr.GetSqlGuid( 1 );	   //-- Получим Guid клиента	
  sdr.GetBytes( 3 , 0 ,TDESKey, 0 ,TDESKey.Length);  //-- Key симметричного алгоритма шифрования
  sdr.GetBytes( 4 , 0 ,cmd, 0 ,cmd.Length);               //-- Разрешенные функции клиента (ПРАВА!!!)
 ...

Далее совсем просто (клиентское приложение):

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
namespace nsApp {
  //======================================================
  //==== С П И С О К   П Р А В 
  //=====================================================
  public enum en_ПраваКлиента{
    РаботаCПанельюСправочники,
    РаботаCПанельюПациенты,
    ИзменениеСправочникаСообщений,
    ...
    Мах
  }   
 
  static class app {
  public static byte[] a_ПраваКлиента=new byte[ 256 ];
  
  //-- Получить значение бита в a_ПраваКлиента - Права Клиента
  //=========================================================
  public static bool мдПраваКлиента(int i) {return ((a_Права[i/ 8 ] & (int)( 1  << (i% 8 )))== 0 )?false:true; }
 
  ...


где то в клиентском приложении:

Код: plaintext
1.
2.
3.
4.
5.
  ...
  using nsApp;
  ...
  if(мдПраваКлиента((int)en_ПраваКлиента.РаботаCПанельюСправочники)) {
   ... делаешь нужное ...
  }

С уважением, Владимир
...
Рейтинг: 0 / 0
Формирование интерфейса в заисимоти от привилегий
    #35071252
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть готовые велосипеды, где все это уже реализованно
...
Рейтинг: 0 / 0
Формирование интерфейса в заисимоти от привилегий
    #35071632
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVaЕсть готовые велосипеды, где все это уже реализованно
ссылку дайте плз, посмотреть?
...
Рейтинг: 0 / 0
Формирование интерфейса в заисимоти от привилегий
    #35071803
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AzMan, NetSqlAzMan
...
Рейтинг: 0 / 0
Формирование интерфейса в заисимоти от привилегий
    #35071896
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVaAzMan, NetSqlAzManа как это поможет в вопросе "Формирование интерфейса в заисимоти от привилегий"?
...
Рейтинг: 0 / 0
Формирование интерфейса в заисимоти от привилегий
    #35072128
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С помощью SCSF c этим я борюсь следующим образом:
1.Права доступа задаются в NetSqlAzMan
2.Грузятся только те модули на которые есть разрешения у пользователя
3.Команды создаются с условиями(conditions) и привязываются к контролу на форме.
При добавлении команды в DI контейнер, вызывается специально обученная стратегия построения,
которая изменяет статус команды на Unavailable,если нет прав на выполнение(при этом контрол становится невидимым).
4.После определенных телодвижений вызывается RefreshServiсe,который перебирает все нужные команды и меняет им статус в зависимости от выполнения условий для них.При изменении статуса команды на Disabled контрол деактивируется на автомате.
...
Рейтинг: 0 / 0
Формирование интерфейса в заисимоти от привилегий
    #35072358
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVa
3.Команды создаются с условиями(conditions) и привязываются к контролу на форме.
При добавлении команды в DI контейнер, вызывается специально обученная стратегия построения,
которая изменяет статус команды на Unavailable,если нет прав на выполнение(при этом контрол становится невидимым).
это тоже настраивается при помощи АзМана? Или он только доступ к модулям ограничивает на среднем слое?
...
Рейтинг: 0 / 0
Формирование интерфейса в заисимоти от привилегий
    #35072446
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В NetSqlAzMan задаются права на выполнение команд.
...
Рейтинг: 0 / 0
Формирование интерфейса в заисимоти от привилегий
    #35072707
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>SeVa
>3.Команды создаются с условиями(conditions) и привязываются к контролу на форме.
Вы не приходилось сталкиваться с ситуацией, когда удобнее сгруппировать и команды (пользователей) и контролы и закрепить группы пользователей за соответствующими группами контролов. Например, для описания прав группы Администраторов достаточно одной группы - РазрешеноВсё (слегка утрирую).

С уважением, Владимир.
...
Рейтинг: 0 / 0
Формирование интерфейса в заисимоти от привилегий
    #35072708
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>SeVa
Извините - Вас.

С уважением, Владимир.
...
Рейтинг: 0 / 0
Формирование интерфейса в заисимоти от привилегий
    #35075823
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир, не совсем понял вопрос.На мой взгляд, разграничение прав доступа по ролям менее удобны.Частично я описал уже алгоритм, в дополнение к нему еще применяются Rules из WF для бизнес логики, построения интерфейса и управления его элементами.Примеры на net3fx(RulesDriven UI & ExternalRuleSetToolkit etc).Почти готовый вариант для применения, добавили только кеширование на клиенте.
...
Рейтинг: 0 / 0
Формирование интерфейса в заисимоти от привилегий
    #35076476
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>SeVa
>Владимир, не совсем понял вопрос. На мой взгляд, разграничение прав доступа по ролям ...
Мы видимо строим клиентские системы для отображения информации клиенту и взаимодействия с ним по-разному. Я предпочитаю использовать одну форму (WinForm) и множество панелей (UserControl), что динамически, по требованию, подгружаются. После того, как панель будет построена и пройдет инициализация графических контролов, но до их отображения на форме, фрагмент инициализирующего метода проверяет разрешения (права) пользователя. Если у клиента есть право работать с сответствующими графическими контролами панели - они будут показаны. Права у меня ассоциируютя скорее не контролом, а с панелью. Битовое поле разрешений (прав) содержит булеву переменную РазрешитьВсё. Если её значение истина - будут показаны все контролы панели. Но возможны нюансы - видимость определенного контрола на панели зависит от предыстории загрузки. Такие панели, как панели работы со справочниками, имеют кнопку "Выбор". По её нажатию значение поля guid строки записывается в глобальную переменную клиентского приложения. Её видимость зависит не только от прав пользователя, но и от ситуации, при которой произошла подгрузка панели справочника.

С уважением, Владимир.
...
Рейтинг: 0 / 0
Формирование интерфейса в заисимоти от привилегий
    #35076729
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По сути и у меня также, но механизмы реализации другие.
...
Рейтинг: 0 / 0
Формирование интерфейса в заисимоти от привилегий
    #35076980
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Небольшое уточнение.Есть существенное отличие-разграничение прав производится по операциям, а не по группам графических контолов.Последние реализуют операции и в зависимости от прав с учетом текущего состояния, показываются или нет пользователю.
...
Рейтинг: 0 / 0
Формирование интерфейса в заисимоти от привилегий
    #35077264
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>SeVa
>Небольшое уточнение...
Для меня это собственно не принципильно. На уровне сервера приложений примерно также, как у Вас. Проверяется доступность функции (класс.метод).
Проверка прав в клиентском приложении сделана так:
Код: plaintext
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.
 ...
  //======================================================
  //==== С П И С О К   П Р А В 
  //=====================================================
  public enum en_Права{ //-- Разрешено
    Всё,
    ПациентыРаботаCПанелью,
    ...
    Мах
  }  
  namespace ns_Сообщения {
    public class uc_Сообщения : System.Windows.Forms.UserControl  {
  ...
  public uc_Сообщения()	{
     InitializeComponent();
     //-- Получим доступ к таблице DataSet
     bds_Сообщения.DataSource=(гп.DS as db_Доступ).ds_Доступ;
     bds_Сообщения.DataMember="спкСообщения";
     //-- Подстроим DataGridView на uc_Сообщения
     dgv_Сообщения.AutoGenerateColumns=false;  
     dgv_Сообщения.DataSource=bds_Сообщения;
     ...
     //-- По умолчанию, сделаем кнопки невидимыми
     btc_Новая.Visible             =false; //-- Кнопка "Новая запись"
     btc_Удалить.Visible          =false; //-- Кнопка "Удалить текущую строку"
     btc_Редактировать.Visible =false; //-- Кнопка "Редактировать текущую строку"
     btc_Сохранить.Visible       =false; //-- Кнопка "Сохранить текущую строку"
     btc_Выбор.Visible             =false; //-- Кнопка "Выбрать текущую строку"
      
     //-- Посмотрим, кто вызвал справочник сообщений
     string strName=app.uc_КтоЗагрузил();  //-- Получим имя вызывающей панели
      
     //-- Проверим Права (Разрешения) пользователя
     bool bl_Права = бом.cmdGetBit((int)en_Права.Всё);
     if(bl_Права){
       btc_Новая.Visible=true;
       btc_Удалить.Visible=true;
       btc_Редактировать.Visible=true;
       btc_Сохранить.Visible=true;
       if(strName!="uc_Справочники") btc_Выбор.Visible=true;
     }
     else {
       bl_Права = ...
     ...

С уважением, Владимир.
p.s. Форум достает. Что за параноидальная мания сбрасывать вход. Не успеваю написать ответ, как долой регистрация.
...
Рейтинг: 0 / 0
Формирование интерфейса в заисимоти от привилегий
    #35077642
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
    //-- По умолчанию, сделаем кнопки невидимыми
     btc_Новая.Visible             =false; //-- Кнопка "Новая запись"
- для одноимённого пункта меню, тоже такой код?
- для одноимённого горячей клавиши, тоже такой код?

Сейчас в современных IDE разработки, даже строка - является классом. А в приложении ~ 200 меню 200 кнопок, причём пользователь конструирует кнопки и меню сам !
______________________________________________
Вы имеете право хранить молчание! Всё что Вы скажете может быть использовано против Вас в суде!
...
Рейтинг: 0 / 0
Формирование интерфейса в заисимоти от привилегий
    #35077650
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
очень полезно открыть Word - настройка панелей инструментов, чтобы не делать велосипеды прошлого тысячилетия.
______________________________________________
Вы имеете право хранить молчание! Всё что Вы скажете может быть использовано против Вас в суде!
...
Рейтинг: 0 / 0
Формирование интерфейса в заисимоти от привилегий
    #35077928
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Сейчас в современных IDE разработки, даже строка - является классом
Это к чему здесь вообще? Как пример, что все, что угодно, можно усложить сверх необходимого?

Petro123А в приложении ~ 200 меню 200 кнопок, причём пользователь конструирует кнопки и меню сам
У меня вся работа с правами вообще максимально абстрагирована от элементов управления и экшнов. Логику я писал выше. Безусловно вот так:
Код: plaintext
1.
2.
3.
if(bl_Права){
   btc_Новая.Visible=true;
   btc_Удалить.Visible=true;
   btc_Редактировать.Visible=true;
делать не стоит.

Petro123Word - настройка панелей инструментов, чтобы не делать велосипеды прошлого тысячилетия
Настройка панелей управления самим пользователем для себя как исключительно настройка интерфейса весьма далека по своей сути от настройки прав кучи пользователей администратором.
...
Рейтинг: 0 / 0
Формирование интерфейса в заисимоти от привилегий
    #35078487
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зачастую бывает так, что права на операции разные(даже просмотр запрещен).В примере выше абстрагированности я не увидел.Мухи и котлеты не разделены.
...
Рейтинг: 0 / 0
Формирование интерфейса в заисимоти от привилегий
    #35078499
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVaВ примере выше абстрагированности я не увидел.Мухи и котлеты не разделены.
Вы про мой пример?
...
Рейтинг: 0 / 0
Формирование интерфейса в заисимоти от привилегий
    #35078552
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Васкецов
1. К тому, что просто данные (абстрактная кнопка) счас никому не нужны. Нужны данные, умеющие что-то делать (более "умная кнопка", в том числе при работе с правами).
Разные методы реализации этого вы приводили.
2.
авторделать не стоит.
+1. Я про это и написал. Просто примеры кода приводить бессмысленно, т.к. в некоторых ЯП велосипед уже написан.
3.
авторНастройка панелей управления самим пользователем для себя как исключительно настройка интерфейса весьма далека по своей сути от настройки прав кучи пользователей администратором.
Тема топика - формирование интерфейса от прав.... У админа - тоже интерфейс (он тоже человек :)).
И кнопка "Удалить" у него тоже есть. А вот если у него полные права, тогда и вопросов нет (оффтоп будет :))

ЗЫ.
В Delphi есть хотя бы такой велосипед.... поэтому всё относительно и готовых решений нет
авторTAction is the generic class for action objects that implement user commands across a range of different controls.

Unit

ActnList

Description

TAction is a generic action component. It can be added to action managers or action lists when there is no predefined action class that implements the desired response to user commands. Unlike predefined action classes, which have built-in methods that respond when users click the client controls, TAction has no built-in response to user commands. Instead, when using TAction, you can provide the response when the action “fires” by writing an OnExecute event handler, and configure the properties of TAction to reflect current conditions by writing an OnUpdate event handler.

Action objects are used to centralize the response to user commands (actions) and to represent user interface elements in applications that use action bands.

TAction can also act as a base class for predefined action classes. You can derive from TAction if you wish to retain the published scope of TCustomAction members, or derive from TCustomAction if you wish to modify their scope.

For predefined actions that augment the behavior of TAction, see the action classes in the StdActns, DBActns, and ExtActns units.
______________________________________________
Вы имеете право хранить молчание! Всё что Вы скажете может быть использовано против Вас в суде!
...
Рейтинг: 0 / 0
Формирование интерфейса в заисимоти от привилегий
    #35078594
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Тема топика - формирование интерфейса от прав....
Ну тогда может быть можно расширенно толковать тему как "формирование интерфейса от того, что ранее сериализовано"?
...
Рейтинг: 0 / 0
Формирование интерфейса в заисимоти от привилегий
    #35079943
Фотография Denis.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем огромное спасибо, очень помогаете! Я чуток поразмылил и придумал следующий метод:
каждому элементу в таг я записываю строку, условно назовем ее экшн. В базе я делаю соответствие экшонов и вьшек/хранимок от которых они зависят, связь многие ко многим. В связующей таблице я добавляю колонку в которой указываю что делать с обладателем этого экшена у себя в таге, например прятать дизейблить или делать ридонли. Далее в онлоаде формы я бегу по коллекции элементов, смотрю какие экшаны навшаны на элемент и смотрю что соответственно с ним делать. Пусть к примеру у нас элемент текстбокс и он зависит от вьюшки(чтобы отобразить) и от хранимки(чтоб сохранить), к примеру вьюшка у нас доступна а хранимка нет. В связующей таблице на недоступность вьюшки прописано хайд, а на недоступность хранимки прописано ридонли, соотвтственно текстбокс станет ридонли. Надеюсь понято объяснил)
Прошу подвергнуть мою идею конструктивной критике, господа.

ЗЫ. главная затея в том, чтобы отобразить права прописанные в оракле(на вьюшки,хранимки...) на своем клиенте винформз.
...
Рейтинг: 0 / 0
Формирование интерфейса в заисимоти от привилегий
    #35080061
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Сергей Васкецов
> Безусловно вот так: ... делать не стоит...
Это почему же. Давайте посмотрим. Вот что делает IDE:

#region Component Designer generated code
private void InitializeComponent() {
...
this.btc_Удалить = new System.Windows.Forms.Button();
...
//
// btc_Удалить
//
this.btc_Удалить.Image = ((System.Drawing.Image)(resources.GetObject("btc_Удалить.Image")));
this.btc_Удалить.Location = new System.Drawing.Point(9, 25);
this.btc_Удалить.Name = "btc_Удалить";
this.btc_Удалить.Size = new System.Drawing.Size(34, 23);
this.btc_Удалить.TabIndex = 15;
this.btc_Удалить.UseVisualStyleBackColor = true;
this.btc_Удалить.Click += new System.EventHandler(this.btc_Удалить_Click);
...

Я настраиваю кнопки в одном месте - после инициализации контролов. Вы предлагаете это сделать внутри программы инициализации, для каждой кнопки (графического контрола) отдельно. И влезать в код, построенный IDE? Можно, но что это собственно даст, что принципиально изменит?
Или Вам не нравится перечисление после if?
Если контролов много, то foreach ... и задействуйте поле Tag контрола.

С уважением, Владимир.
...
Рейтинг: 0 / 0
Формирование интерфейса в заисимоти от привилегий
    #35080115
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>SeVa
>В примере выше абстрагированности я не увидел.Мухи и котлеты не разделены.
Если Вы беседуете со мной, то давайте посмотрим.
Как только клиентское приложение загрузится, пользователю на будет показана панель "uc_Заставка". Здесь картинка (эмблема фирмы?) и одна кнопка "Регистрация". Доступна всем. Нажимаем и получаем системную форму ввода Login и Password. По завершению процесса аутентификации сервер приложения передаст и права (разрешения) доступа клиентскому приложению. Клиентское приложение удаляет с формы "uc_Заставка" и загружает панель с набором контролов (например кнопок) определяющих функционал всего приложения. После инициализации панели проверяем права и гасим контролы, если к ним доступ запрещен. Если клиент администратор, то все контролы видимы. Пользовательский функционал кнопки (к напримеру) определяется программой обработки события (например, нажатие кнопки "Удалить"). Если кнопка не видима, то "нажать" нельзя. Если разрешено, то:

Клиентское приложение

Код: plaintext
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.
 //-- Удалим выделенную строку
 //----------------------------
 private void btc_Удалить_Click(object sender, EventArgs e) {
   int iRow=dgv_Сообщения.CurrentCell.RowIndex; if(iRow==- 1 ) return;
   byte[] bs=new byte[ 8 ];
   using( DataTable dt=(гп.DS as db_Доступ).ds_Доступ.спкСообщения){
     //-- Строка содержится только в локальном DataSet?
     if((dt.Rows[iRow]["тсСообщение"]) is System.DBNull) {dt.Rows[iRow].Delete();return;}
      
     //-- Строка содержится на сервере данных
     //-- Формируем байтовую последовательность Info (команда для сервера приложений)
     бом.xms=new MemoryStream();
     бом.xms.WriteByte( 1 ); //-- индекс функциональной группы методов
     бом.ShortToXMS((short)мдКлСП.мдКлСП_Справочники);           //-- бом.xms <-- индекс класса
     бом.ShortToXMS((short)мдКлСП_Справочники.мдСообщения_Del);  //-- бом.xms <-- индекс метода
     бом.GuidToXMS((Guid)dt.Rows[iRow]["гдСообщение"]);          //-- бом.xms <-- guid удаляемой строки
     bs=(byte[])dt.Rows[iRow]["тсСообщение"];
     бом.xms.Write(bs, 0 ,bs.Length);                              //-- бом.xms <-- сериализация time-stamp
   }
   бом.xbb=бом.xms.ToArray();
   if (!бом.ФормированиеПакетаЗапроса()) {app.во("Ошибка формирования запроса","Работа со справочником сообщений"); return; }
   bl_Запрет=true; //-- Запрет выполнения функционала компонент
   бом.ДлительнаяФункция(dow_Сообщения_Del, rwc_Сообщения_Del);
   return;
 }
 //-- Запуск dow_Сообщения_del в рабочем потоке;
 private void dow_Сообщения_Del(object sender, DoWorkEventArgs e) {
   if(!бом.ЗапросОтвет()) return;    //-- Ошибка
 }  
 private void rwc_Сообщения_Del(object sender,RunWorkerCompletedEventArgs e) {
 ...

Команда полетела на сервер приложения. Но есть тонкость - время отклика может быть более 2 сек. Нарушается комфортность общения. Процесс ожидания надо как-то отразить. Поэтому вынужден запускать запрос-ответ в рабочем потоке(>SeVa
>В примере выше абстрагированности я не увидел.Мухи и котлеты не разделены.
Если Вы беседуете со мной, то давайте посмотрим.
Как только клиентское приложение загрузится, пользователю на будет показана панель "uc_Заставка". Здесь картинка (эмблема фирмы?) и одна кнопка "Регистрация". Доступна всем. Нажимаем и получаем системную форму ввода Login и Password. По завершению процесса аутентификации сервер приложения передаст и права (разрешения) доступа клиентскому приложению. Клиентское приложение удаляет с формы "uc_Заставка" и загружает панель с набором контролов (например кнопок) определяющих функционал всего приложения. После инициализации панели проверяем права и гасим контролы, если к ним доступ запрещен. Если клиент администратор, то все контролы видимы. Пользовательский функционал кнопки (к напримеру) определяется программой обработки события (например, нажатие кнопки "Удалить"). Если кнопка не видима, то "нажать" нельзя. Если разрешено, то:

Клиентское приложение

Код: plaintext
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.
 //-- Удалим выделенную строку
 //----------------------------
 private void btc_Удалить_Click(object sender, EventArgs e) {
   int iRow=dgv_Сообщения.CurrentCell.RowIndex; if(iRow==- 1 ) return;
   byte[] bs=new byte[ 8 ];
   using( DataTable dt=(гп.DS as db_Доступ).ds_Доступ.спкСообщения){
     //-- Строка содержится только в локальном DataSet?
     if((dt.Rows[iRow]["тсСообщение"]) is System.DBNull) {dt.Rows[iRow].Delete();return;}
      
     //-- Строка содержится на сервере данных
     //-- Формируем байтовую последовательность Info (команда для сервера приложений)
     бом.xms=new MemoryStream();
     бом.xms.WriteByte( 1 ); //-- индекс функциональной группы методов
     бом.ShortToXMS((short)мдКлСП.мдКлСП_Справочники);           //-- бом.xms <-- индекс класса
     бом.ShortToXMS((short)мдКлСП_Справочники.мдСообщения_Del);  //-- бом.xms <-- индекс метода
     бом.GuidToXMS((Guid)dt.Rows[iRow]["гдСообщение"]);          //-- бом.xms <-- guid удаляемой строки
     bs=(byte[])dt.Rows[iRow]["тсСообщение"];
     бом.xms.Write(bs, 0 ,bs.Length);                              //-- бом.xms <-- сериализация time-stamp
   }
   бом.xbb=бом.xms.ToArray();
   if (!бом.ФормированиеПакетаЗапроса()) {app.во("Ошибка формирования запроса","Работа со справочником сообщений"); return; }
   bl_Запрет=true; //-- Запрет выполнения функционала компонент
   бом.ДлительнаяФункция(dow_Сообщения_Del, rwc_Сообщения_Del);
   return;
 }
 //-- Запуск dow_Сообщения_del в рабочем потоке;
 private void dow_Сообщения_Del(object sender, DoWorkEventArgs e) {
   if(!бом.ЗапросОтвет()) return;    //-- Ошибка
 }  
 private void rwc_Сообщения_Del(object sender,RunWorkerCompletedEventArgs e) {
 ...

Команда полетела на сервер приложения. Но есть тонкость - время отклика может быть более 2 сек. Нарушается комфортность общения. Процесс ожидания надо как-то отразить. Поэтому вынужден запускать запрос-ответ в рабочем потоке (BackgroundWorker). В UI потоке отображается ProgressBar.

Сервер приложений. При анализе клиентского запроса его права загружаются из строки сессии.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
//-- Удалим запись из справочника сообщений 
 //-- Обработка клиентского запроса (команды) 
 //--  Вход (бом.xms):
 //--    Guid      гдСообщение - 0. номер записи
 //--    byte[8] тсСообщение - 1. сериализация time-stamp 
 //====================================================================
 public static void мдСообщения_Del(){
    //-- Проверим права
    bool bl_Права=бом.cmdGetBit((int)en_Права.Всё);
     if(!bl_Права){бом.xbb=ош.btError[(int)err.мдСообщения_Del_0]; return;}
 ...
Если права отсутствуют, то клиент получит ошибку.

С уважением, Владимир.
p.s. Возможно команды C# мало что дают, но комментарии помогут понять суть. В UI потоке отображается ProgressBar.

Сервер приложений. При анализе клиентского запроса его права загружаются из строки сессии.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
//-- Удалим запись из справочника сообщений 
 //-- Обработка клиентского запроса (команды) 
 //--  Вход (бом.xms):
 //--    Guid      гдСообщение - 0. номер записи
 //--    byte[8] тсСообщение - 1. сериализация time-stamp 
 //====================================================================
 public static void мдСообщения_Del(){
    //-- Проверим права
    bool bl_Права=бом.cmdGetBit((int)en_Права.Всё);
     if(!bl_Права){бом.xbb=ош.btError[(int)err.мдСообщения_Del_0]; return;}
 ...
Если права отсутствуют, то клиент получит ошибку.

С уважением, Владимир.
p.s. Возможно команды C# мало что дают, но комментарии помогут понять суть.
...
Рейтинг: 0 / 0
Формирование интерфейса в заисимоти от привилегий
    #35080119
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не понял, что делает сайт.

>SeVa
>В примере выше абстрагированности я не увидел.Мухи и котлеты не разделены.
Если Вы беседуете со мной, то давайте посмотрим.
Как только клиентское приложение загрузится, пользователю на будет показана панель "uc_Заставка". Здесь картинка (эмблема фирмы?) и одна кнопка "Регистрация". Доступна всем. Нажимаем и получаем системную форму ввода Login и Password. По завершению процесса аутентификации сервер приложения передаст и права (разрешения) доступа клиентскому приложению. Клиентское приложение удаляет с формы "uc_Заставка" и загружает панель с набором контролов (например кнопок) определяющих функционал всего приложения. После инициализации панели проверяем права и гасим контролы, если к ним доступ запрещен. Если клиент администратор, то все контролы видимы. Пользовательский функционал кнопки (к напримеру) определяется программой обработки события (например, нажатие кнопки "Удалить"). Если кнопка не видима, то "нажать" нельзя. Если разрешено, то:

Клиентское приложение

Код: plaintext
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.
 //-- Удалим выделенную строку
 //----------------------------
 private void btc_Удалить_Click(object sender, EventArgs e) {
   int iRow=dgv_Сообщения.CurrentCell.RowIndex; if(iRow==- 1 ) return;
   byte[] bs=new byte[ 8 ];
   using( DataTable dt=(гп.DS as db_Доступ).ds_Доступ.спкСообщения){
     //-- Строка содержится только в локальном DataSet?
     if((dt.Rows[iRow]["тсСообщение"]) is System.DBNull) {dt.Rows[iRow].Delete();return;}
      
     //-- Строка содержится на сервере данных
     //-- Формируем байтовую последовательность Info (команда для сервера приложений)
     бом.xms=new MemoryStream();
     бом.xms.WriteByte( 1 ); //-- индекс функциональной группы методов
     бом.ShortToXMS((short)мдКлСП.мдКлСП_Справочники);           //-- бом.xms <-- индекс класса
     бом.ShortToXMS((short)мдКлСП_Справочники.мдСообщения_Del);  //-- бом.xms <-- индекс метода
     бом.GuidToXMS((Guid)dt.Rows[iRow]["гдСообщение"]);          //-- бом.xms <-- guid удаляемой строки
     bs=(byte[])dt.Rows[iRow]["тсСообщение"];
     бом.xms.Write(bs, 0 ,bs.Length);                              //-- бом.xms <-- сериализация time-stamp
   }
   бом.xbb=бом.xms.ToArray();
   if (!бом.ФормированиеПакетаЗапроса()) {app.во("Ошибка формирования запроса","Работа со справочником сообщений"); return; }
   bl_Запрет=true; //-- Запрет выполнения функционала компонент
   бом.ДлительнаяФункция(dow_Сообщения_Del, rwc_Сообщения_Del);
   return;
 }
 //-- Запуск dow_Сообщения_del в рабочем потоке;
 private void dow_Сообщения_Del(object sender, DoWorkEventArgs e) {
   if(!бом.ЗапросОтвет()) return;    //-- Ошибка
 }  
 private void rwc_Сообщения_Del(object sender,RunWorkerCompletedEventArgs e) {
 ...

Команда полетела на сервер приложения. Но есть тонкость - время отклика может быть более 2 сек. Нарушается комфортность общения. Процесс ожидания надо как-то отразить. Поэтому вынужден запускать запрос-ответ в рабочем потоке (BackgroundWorker). В UI потоке отображается ProgressBar.

Сервер приложений. При анализе клиентского запроса его права загружаются из строки сессии.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
//-- Удалим запись из справочника сообщений 
 //-- Обработка клиентского запроса (команды) 
 //--  Вход (бом.xms):
 //--    Guid      гдСообщение - 0. номер записи
 //--    byte[8] тсСообщение - 1. сериализация time-stamp 
 //====================================================================
 public static void мдСообщения_Del(){
    //-- Проверим права
    bool bl_Права=бом.cmdGetBit((int)en_Права.Всё);
     if(!bl_Права){бом.xbb=ош.btError[(int)err.мдСообщения_Del_0]; return;}
 ...
Если права отсутствуют, то клиент получит ошибку.

С уважением, Владимир.
p.s. Возможно команды C# мало что дают, но комментарии помогут понять суть.
...
Рейтинг: 0 / 0
Формирование интерфейса в заисимоти от привилегий
    #35081645
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Denis.
softwarer (c)
/topic/424766&hl=#4090613
...
Рейтинг: 0 / 0
Формирование интерфейса в заисимоти от привилегий
    #35081948
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеевДавайте посмотрим. Вот что делает IDE
Вы думаете, стоит повторять за кем-то создание велосипеда с квадратными колесами? Тем более что Ваш пример не очень уместен в данной теме.

ВМоисеевИ влезать в код, построенный IDE?
Нигде я такого не предлагал, Вы что-то путаете.

ВМоисеевИли Вам не нравится перечисление после if?
Мне не нравится больше всего необходимость даже задумываться, а не отъедет ли раздача прав, не говоря уже о необходимости пописать что-то, даже отдаленно связанное с правами доступа, если в приложении хоть что-то меняется.

Еще раз основная мысль: функциональность раздачи и натягивания прав (да вообще все, что связано с правами доступа) доступа должна быть максимально абстрагирована от логики приложения, чтобы при создании новой функциональности ( в том числе при создании нового Action-а, переименовании или удалении любого Action-а ) ее ВООБЩЕ не надо было трогать. А так как каждое раздаваемое полномочие протестировать обычно крайне сложно, то работать это должно как часы, и любые лишние усложнения чреваты.
...
Рейтинг: 0 / 0
Формирование интерфейса в заисимоти от привилегий
    #35082865
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Сергей Васкецов
>Вы думаете, стоит повторять за кем-то создание велосипеда ...

М-да. Извините, но дальнейший разговор с Вами бессмысленен. Я сказал то, что мог. Могущие пусть скажут больше.

С уважением, Владимир.
...
Рейтинг: 0 / 0
70 сообщений из 70, показаны все 3 страниц
Форумы / Разработка информационных систем [игнор отключен] [закрыт для гостей] / Формирование интерфейса в заисимоти от привилегий
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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