powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Распределение прав доступа в прогах...
44 сообщений из 44, показаны все 2 страниц
Распределение прав доступа в прогах...
    #32561288
olol
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
К вопросу об администрировании и распределению прав... в прогах при работе с данными на SQL сервере.

Этот вопрос к работе любого сервера (не только на IB и др.), но ведь вы с базой все равно на какой-нибудь проге работаете...

Задал вопрос на Delphi и чей-то, как-то, никому и никак...
Хочу узнать как делают это другие...

НАПРИМЕР: при вводе данных необходимо обеспечить распределение прав между пользователями типа:
- занесение заказов (заявок)
- простановка дат изготовления (планирование)
- заполнение технологии (порядка работы)
- ...

При этом на одной форме операций разные пользователи заносят данные только в свои поля...

Если делать только на уровне прав базы - то не приятно нажав Ок получить сообщение что у вас нет прав... Лучше вообще не давать это делать...
Делать отдельные формы для каждого - глупо (сегодня у него одни права, а завтра - другие).

Я создал служебные таблицы в которых храню 'Имена форм', 'Имена объектов на формах' и 'Права доступа к объектам'.

На OnCreate формы считываю этот список в массив, а на OnShow раставляю своийства Enabled и Visible в соответствии со списком прав пользователя (который получаю при входе в систему)...

При этом 'запрещенные' кнопки, меню... - серенькие или нет совсем.
Для удобства элементы разбиты на группы по панелям (чтоб не задавать для каждого).

Управление основано на ограничении прав, а не на разрешении... т.е. заносятся только те формы и элементы доступ к которым необходимо ограничить.

При этом все реализуется просто (цепляешь по две функции к формам) и правами рулиш без изменения проги (вплоть до права печати отчетов)...

Поделитесь своим опытом, кто что знает и какие у кого в этом вопросе проблемы...
...
Рейтинг: 0 / 0
Распределение прав доступа в прогах...
    #32561396
Gold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посмотри IBXUserProfile - потом и нам расскажешь, а то у меня времени небыло смотреть :-(
...
Рейтинг: 0 / 0
Распределение прав доступа в прогах...
    #32561438
olol
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GoldПосмотри IBXUserProfile - потом и нам расскажешь, а то у меня времени небыло смотреть :-(

Благодарю... хоть что-то... бум смотреть...

А что больше это никому не нужно? Или уже давно решеный вопрос?
Тогда дайте хотябы ссылку...
...
Рейтинг: 0 / 0
Распределение прав доступа в прогах...
    #32561960
Igor Elyas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уровень прав на приложении не совсем хороший тон. Часть прав все равно надо делать на уровне БД.

Возможно ограничение на уровне VIEW.

в табличку вносится поле содержащее роль того или иного отдела и соответсвенно видимые/невидимые записи отбираются условием типа:

Код: plaintext
 WHERE CURRENT_ROLE = VisibleRole 

соответсвенно все операции идут через VIEW, правда придется написать триггеры на вьюшку.

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

Тоже самое можно сделать через хранимки.

На практике желательно избегать прямых прав пользователей на таблицы.

Как то я уже обжегся с тех пор препочитаю перестраховаться.
...
Рейтинг: 0 / 0
Распределение прав доступа в прогах...
    #32562035
Tonny
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ActionList, все действия - через него. Каждому TActionItem прописывается индивидуальный Tag.

таким образом вся раздача прав выполняется вложенным циклом.
Более сложный случай (то, что и использую).
константные массивы:
1. массив форм (массив строк)
2. массив групп действий (массив строк)
3. массив действий [0..CountActions]: название, номер формы, номер группы, тэг.

в базе хранится строка из 0 или 1, длинной как массив [3], т.е. на каждое действие доступ есть/нету. После коннекта к базе всем формам рассылается сообщение "обновиться", и в каждой форме свой обработчик закрывает/открывает доступы к обьектам по общедоступному массиву доступа
access: array[0..CountActions] of boolean;

На главной форме в одном цикле настраивается доступ к главному меню. Так же в одном цикле настраиваются все формы, основанные на ActionList.

при такой организации массива 3 через treeView легко делается форма настройки прав.
...
Рейтинг: 0 / 0
Распределение прав доступа в прогах...
    #32562246
Winni-Pooh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А почему бы не просматривать RDB$USER_PRIVILEGES и так заранее узнавать о правах. Работа с метаданными - это универсально. Зачем зря пытаться до получения ошибки? К тому же при работе через ODBC текст ошибки можно перехватывать, а текст ошибки формировать Exception-ом в IB(в виде собственного кода)
...
Рейтинг: 0 / 0
Распределение прав доступа в прогах...
    #32562342
Igor Elyas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Winni-Pooh

Хочу вас уведомить что заЕбешься пишется в этом случае БОЛЬШИМИ БУКВАМИ :)))))

Во вторых это вынос разбора прав в приложение - а это evil.
...
Рейтинг: 0 / 0
Распределение прав доступа в прогах...
    #32562409
Winni-Pooh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
О каком зле ты говоришь? И как ты это зло себе представляешь? Пойми - это обработка МЕТАДАННЫХ! Это универсально изначально. А на метаданные тоже вообще-то можно правильно распределить права. Вот и все. И поверь мне- это самый короткий код(если руки правильно растут), и никакого гемора. :-))
...
Рейтинг: 0 / 0
Распределение прав доступа в прогах...
    #32562431
Igor Elyas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зло это объем работы для реализации...
...
Рейтинг: 0 / 0
Распределение прав доступа в прогах...
    #32562454
Igor Elyas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вынос прав в приложение опасен тем что найдутся люди и в зависимости от ценности информации будут вносить изменения ручками в обход твоей безопасности реализованной в приложении.
...
Рейтинг: 0 / 0
Распределение прав доступа в прогах...
    #32562457
Winni-pooh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я так не думаю.. А по поводу ХП и вьюшек просто добавлю для olol, что последние - прекрасное средство ограничения доступа для массового изменения содержимого таблицы. Поясню: некоторым работникам(ролям)необходимо логически дать право удалять записи из какого-либо журнала. Если просто дать право на DELETE, то юзер по глупости и из чувства ламерства может ухнуть нахрен все содержимое таблицы за раз, хотя тебе хотелось, чтобы удаление могло происходить только по 1 записи(документу) и т.д.
...
Рейтинг: 0 / 0
Распределение прав доступа в прогах...
    #32562467
Igor Elyas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Безопасность это комбинация приложения и БД.
и нельзя всю выносить все в приложение.
Аксиома.
...
Рейтинг: 0 / 0
Распределение прав доступа в прогах...
    #32562470
Winni-Pooh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
to Tonny

Решение типа ActionList хорошо, если проектируешь небольшую информационную систему, а если большую, полиморфную, то наоборот, стремятся убрать из клиента ВСЕ ДАННЫЕ о бизнес-правилах работы клиента. В этом случае ВСЕ ДОЛЖНО ХРАНИТЬСЯ В БАЗЕ ДАННЫХ, даже схемы обработки документов. Только тогда при изменении правил программеру не придется лезть в исходник или мудрить с совершенной системой обновления логических настроек клиента. Представь систему на 150-200 пользователей, с 10-20 видами АРМов, где есть общие универсальные модули работы с данными, зависящими от бизнес-правил
...
Рейтинг: 0 / 0
Распределение прав доступа в прогах...
    #32562472
Igor Elyas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот блин заработался ....
прям говорить внятно разучился :)))))))
...
Рейтинг: 0 / 0
Распределение прав доступа в прогах...
    #32562475
Winni-Pooh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
to Igor Elyas

Полностью с вами согласен. Но имею в виду причину не безопасность, а гибкость системы в целом
...
Рейтинг: 0 / 0
Распределение прав доступа в прогах...
    #32562493
Winni-Pooh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
to Igor Elyas

Моя последняя реплика к вашей предпоследней, если что.... :D. Предлагаю перейти к обсуждению предложенной мной темы по трехзвенке как более мощной форме распределения прав и контроля Базы Данных и рассматривать как продолжение текущей теме....Просто я не нашел на этом форуме обсуждения трехзвенки ранее
...
Рейтинг: 0 / 0
Распределение прав доступа в прогах...
    #32562751
olol
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо за обсуждение, не успел ничего спросить… (рабочий день кончился).

Пару слов от себя:

GoldПосмотри IBXUserProfile - потом и нам расскажешь, а то у меня времени небыло смотреть :-(

Посмотрел… Ну что сказать… Возможно кого-то заинтересует… но хранение прав в BLOB меня не прельщает…

Winni-Pooh
А почему бы не просматривать RDB$USER_PRIVILEGES…
…это универсально.

Хоть это форум IB и др., но если говорить об универсальности то, как быть с Oracle, MS и др.
Каждый варится в собственном соку… У меня сегодня IB – а завтра его могут уничтожить как класс и все делать на Oracle (на нем - зарплата и сие от меня не зависит).

Winni-Pooh
…ВСЕ ДОЛЖНО ХРАНИТЬСЯ В БАЗЕ ДАННЫХ, даже схемы обработки документов.

Разве в RDB$USER_PRIVILEGES есть перечень прав к формируемым отчетам? Или предлагаешь их туда занести?

Igor Elyas
Уровень прав на приложении не совсем хороший тон. Часть прав все равно надо делать на уровне БД.

Проверка прав прогой вовсе не исключает наличие прав в БД.
Я согласен, что безопасность - это комбинация приложения и БД, но разве есть какая-то разница между работой через ХП с ограниченными правами и заданию этих же прав на элементы прогой?

Причем когда я, например, вывожу форму для редактирования выполняемой операции, то разные пользователи заносят только свои данные, а доступа к ‘чужим’ у них нет, хотя они отображаются.

Главное - я уяснил – что сделал не так уж и плохо…
мож кто истчо чо добавит…
...
Рейтинг: 0 / 0
Распределение прав доступа в прогах...
    #32562763
alex_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в процессе размышлений на эту тему я пришол к выводу о необходимости создания промежуточного звена, отвечающего за доступ к объектам. Это касается только моего конкретного случая, насколько это подойдет к другим задачам - другой вопрос.

В моем случае пользователи работают не с таблицами, полями или процедурами, они работают с документами и свойствами документов.

Вот я и думаю, что промежуточный слой должен преобразовывать запросы клиентских приложений на получение/изменение документов в запросы к sql серверу сообразно правам доступа пользователя, который делает запрос.
Причем пользователь будет определен как пользователь NT домена, а не пользователь базы данных.

Но это только мысли, на практике у меня этот промежуточный слой зашит в клиентскую программу, что конечно не есть гут.
...
Рейтинг: 0 / 0
Распределение прав доступа в прогах...
    #32562798
Dik76
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посмотри здесь. имхо: это то что доктор прописал :)))
...
Рейтинг: 0 / 0
Распределение прав доступа в прогах...
    #32562801
olol
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex_k
В моем случае пользователи работают не с таблицами, полями или процедурами, они работают с документами и свойствами документов.


Что значит - работают с документами?

Если это таблица с полями свойств и BLOB полем для хранения файла документа - то какая разница?

Любое действие в проге происходит не само посебе, а нажав соответствующую пимпочку или пунтик меню, кроме 'быстрых' клавиш (которые всеравно должны быть привязаны к ним).

Соответственно, если все визуальные элементы будут перечислены с правами доступа, то любое действие в проге можно рулить...

И пускай не смущает 'большой' перечень прав... ведь в твоей проге они серано задаются и проверяются... а на деле перечень окажется не очень большим.

У меня есть таблица групповых прав и состав групп

Например: Технические службы->Конст.Тех.отдел->Технологи->Ведущий технолог

Задав юсеру право 'Ведущий технолог' - он автоматом получает и все остальное...
Чем ниже право - тем больше, но уже.
Можно задать любую группу включив туда всего помаленьку...
Весь перечень прав я получаю по ХП одним запросом...
...
Рейтинг: 0 / 0
Распределение прав доступа в прогах...
    #32562803
Dik76
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще здесь.
...
Рейтинг: 0 / 0
Распределение прав доступа в прогах...
    #32562834
olol
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dik76Посмотри здесь. имхо: это то что доктор прописал :)))

Не понял юмора... я не такой гигант мысли...

Ну потратил я на создание этих таблиц и форм их редактирования пару дней...

Потом за полчаса переделал программку...

Зато теперь не надо менять прогу из-за того, что кому-то что-то надо разрешить или запретить...
...
Рейтинг: 0 / 0
Распределение прав доступа в прогах...
    #32562845
Dik76
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ты не понял, там есть ядро безопасности. Права доступа определяются через него. Переписывать ни чего не надо.
...
Рейтинг: 0 / 0
Распределение прав доступа в прогах...
    #32562847
alex_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot olol
Что значит - работают с документами?
[/quot]
это значит что в принципе, пользователю не важно что и как. он работает с документом.
Медиаплан, счет, прайслист, не важно. В любом случае он видит то что получит. Обычно это табличка в стиле екселя, в которой он заполняет нужные поля. Поэтому эти данные, из которых состоит документ, вполне возможно передавать клиенту и не в виде результата sql запроса.
...
Рейтинг: 0 / 0
Распределение прав доступа в прогах...
    #32562882
olol
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dik76
…там есть ядро безопасности.
…Переписывать ни чего не надо.

Не для меня все это… В одиночку такое не делают… И что значит ‘ни чего не надо’?

Насколько я понял, сама прога должна быть написана с обращением к объекту ядра…
Что мне писать новую прогу? Времени нет и на текущие дела…
Да и не бесплатно это…

to alex_k

Если прога берет данные не из таблиц – то я пас…
Хотя их наверно тоже можно перечислить и описать (в прогу же закладываешь какую-то логику)

Да и с прямым вводом в грид нужно делать немножко по другому…
Ведь грид – это один объект, а нужен доступ к ячейкам грида…

Я над этим не заморачивался… у меня просто нет прямого редактирования в гридах.
...
Рейтинг: 0 / 0
Распределение прав доступа в прогах...
    #32563193
Igor Elyas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Winni-Pooh

Трехзвенка это очень обширная задача. Сколько реализаций столько идей.

Сформулируй вопрос ... можно будет обсудить.

На своей практике нужда в трехзвенке у меня возникала только в случае доступа удаленных офисов к общей БД через web.

На самом деле она решает часть сложных проблем за счет увеличения сложности и стоимости разработки.
...
Рейтинг: 0 / 0
Распределение прав доступа в прогах...
    #32563223
olol
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to Igor Elyas

Winni-Pooh этот вопрос продолжил в теме: Multi-Tier, или трехзвенка
...
Рейтинг: 0 / 0
Распределение прав доступа в прогах...
    #32563383
Dik76
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторНасколько я понял, сама прога должна быть написана с обращением к объекту ядра…
Что мне писать новую прогу?

Да, нужен еще интерфейс для администрирования доступа.

авторДа и не бесплатно это…

Я не предлагаю покупать :)))
Сама идея - вот суть.
...
Рейтинг: 0 / 0
Распределение прав доступа в прогах...
    #32563456
olol
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dik76
Сама идея - вот суть.

Идея - это хорошо... а у тебя как реализовано? Или тока идеи?
...
Рейтинг: 0 / 0
Распределение прав доступа в прогах...
    #32564853
Tonny
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Winni-Pooh
представляю :)
я такую систему внедрял. Всё как вы говорите: трёхзвенка, вся бизнес-логика, вся безопасность - на сервере БД (MSSQL).
Приведенный мной вариант -действительно для достаточно простой системы, где функциональность АРМ задаётся указанием доступных для использования функций и прав. Но кому интересно - могу описать подробнее.
...
Рейтинг: 0 / 0
Распределение прав доступа в прогах...
    #32564953
Dik76
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ololа у тебя как реализовано?

У меня реализованно упрощенная версия ядра (разграничение доступа на уровне динамически формируемого меню). Предоставление доступа к пунктам реализуется через утилиту администратора. Сейчас работаю как раз над разграничением на уровне операций. Попутно хочу описав объекты системы, хотя бы частично автоматизировать написание клиента.
...
Рейтинг: 0 / 0
Распределение прав доступа в прогах...
    #32565038
olol
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dik76
...упрощенная версия ядра...

Ты динамически создаеш ФОРМЫ с меню или только меню на готовых формах?

Если только меню......
А если формы, то на них кроме меню бывает целая куча различных элементов ввода...

Хотя конечно можно для каждой роли создать свою форму...
Но там и без ролей хватает проблем, например с передачей параметров выбора между динамическими формами...

А на счет модуля Администрирования... дык я на него и потратил 2 дня...
Просто создать таблицы и занести туда права обычным SQL Explorer можно и за час... (немного загнул... смотря сколько форм и прав).
...
Рейтинг: 0 / 0
Распределение прав доступа в прогах...
    #32565155
Dik76
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторА если формы, то на них кроме меню бывает целая куча различных элементов ввода...

Вот об этом и речь. Я приследую цель описав объекты системы (ПР: объект - сотрудник, свойства - ФИО, ДР...), управлять доступом уже до свойств объекта.
...
Рейтинг: 0 / 0
Распределение прав доступа в прогах...
    #32565225
olol
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dik76
...объекты системы...

Насколько я понял твои объекты имеют мало что общего с тем куда ты меня посылал... вот там точно крыша съедит...
Можешь сам посмотреть в разделе 'Проектирование' тема 'Люди свершилось...'

Твой объект 'сотрудник' привязан к полю таблицы или элементу ввода на форме с указаниеп его типа? (Edit, ListBox...)

И вообще под какую задачу пишешь? Или просто заготовка на будущее?
...
Рейтинг: 0 / 0
Распределение прав доступа в прогах...
    #32565826
Dik76
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Насколько я понял твои объекты имеют мало что общего с тем куда ты меня посылал...
отсылал сюда (пост можно сказать описывает мою цель, ядро безопасности лишь модуль), потому что вещь интересная. я реализую по своему.

Твой объект \'сотрудник\' привязан к полю таблицы или элементу ввода на форме с указаниеп его типа? (Edit, ListBox...)
он привязан к сущности (таблице), а поля являются атрибутами. Для атрибутов указывается их визуальное представление (Edit, ...).

И вообще под какую задачу пишешь? Или просто заготовка на будущее?
Делаю не зависимую систему, т.е. это промежуточный слой м/у реляционной БД (на oracle) и клиентом (Delphi).
...
Рейтинг: 0 / 0
Распределение прав доступа в прогах...
    #32566218
mapnn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет!

Когда-то я написал IBXUserProfile но вскоре понял, что это ошибка.

Невозможно сделать нечто универсальное для настройки
всего "визуального" на все случаи жизни.

По-моему, более правильный вариант использовать простые
пользовательские переменные (неважно где их хранить)
наподобие ini - файла и по их текущему значению настраивать
интерфейс и логику программы - это более гибко.

Я это использую в достаточно большой системе (10 филиалов,
разбросанных по городу в радиусе 50 км)

По этому поводу, я написал компонент IBXUserProfiles 2.0,
не очень удачный, но у меня (в моей компании) работает
без проблем.

Кому интересно,
заглядывайте на http://www.sinn.ru/~mapnn

С уважением, Игорь Ильинский
...
Рейтинг: 0 / 0
Распределение прав доступа в прогах...
    #32566226
alex_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mapnnВсем привет!

Когда-то я написал IBXUserProfile но вскоре понял, что это ошибка.


По этому поводу, я написал компонент IBXUserProfiles 2.0,
не очень удачный, но у меня (в моей компании) работает
без проблем.

при всем уважении :-)
напоминает историю развития технологий майкрософт.
"но потом другая группа разработчиков увидела фатальный недостаток в com - его придумали не они!" (с) вольный :-)
...
Рейтинг: 0 / 0
Распределение прав доступа в прогах...
    #32566235
mapnn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет Alex

"Всегда хочется <как лучше>, а получается <как всегда>"

(c) Черномырдин

С другой стороны, мне не стыдно,
так-как не ошибается тот кто ничего не делает,
а тот, кто хоть что-то пытается, того заочно можно простить ....

mapnn :))
...
Рейтинг: 0 / 0
Распределение прав доступа в прогах...
    #32566440
olol
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dik76
...ядро безопасности лишь модуль...
…указывается их визуальное представление...

Вот тут ты батенька ошибаешься. Это СооовСееем разные вещи…
Описание объектов как классов и свойств – другая задача, хотя и там есть своя система безопасности…

Зри внимательней… там две части: свойства связанные с данными (таблицами, их взаимодействием и защитой) и свойства интерфейса проги… (хотя тоже с правами)

Не нужно их скрещивать (не Мичурин ведь)… Ничего хорошего не выйдет…
А вот визуальные свойства и права их действия для пользователя являются едиными, поскольку относятся к общим объектам.
Например: TEdit.Enabled, Visible, ReadOnly и OnClik… как в прочем и TForm.Height, Width и др.

Dik76
Делаю не зависимую систему…

Нужно быть немного реалистичней, если конечно хош создать нечто, чем заинтересуются другие…
Если сделать модуль (лучше в виде компоненты) который позволит с минимальной доработкой проги ее разрулить… т.е. автоматизирует заполнение таблиц свойств допуска…

Например: поможет из Application выдернуть все формы, из Form все объекты, а из Object его свойства, методы и проставить им соответствующие права…
Тоды любой смогёт это быстро сделать и возможно даже спасибо скажут…
Лично у меня сейчас на это времени нет…
Если интересует могу описать что получилось по подробнее...

mapnn
…использовать простые пользовательские переменные (неважно где их хранить) наподобие ini – файла…


Вот тут я с тобой не согласен… Очень даже важно…
Какой геморрой творится в ini… особенно если этих настоек много… Для этого есть реестр, но…

Если хранить их на сервере – то получишь независимость от компа… Пользователь получит свои настройки на любой машине… И рулить ими легче в одном месте…

А вот считанные данные действительно можно хранить в простом массиве строк, например TStringList.

Я считываю настройки для формы только один раз (при ее создании), а потом уже (при ее выводе) устанавливаю свойства объектов из полученного массива.

При этом все параметры получаю одним SELECT из ХП без особого увеличения нагрузки и времени выполнения…
И при смене пользователя, настройки для форм - те же (не нужно их перечитывать), просто при ее выводе свойства сменятся согласно новым правам…
...
Рейтинг: 0 / 0
Распределение прав доступа в прогах...
    #32566510
Dik76
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ololОписание объектов как классов и свойств – другая задача, хотя и там есть своя система безопасности…
..
Не нужно их скрещивать (не Мичурин ведь)… Ничего хорошего не выйдет…

Я попробую :))), потом расскажу что вышло.
...
Рейтинг: 0 / 0
Распределение прав доступа в прогах...
    #32567036
mapnn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
olol
Вот тут я с тобой не согласен… Очень даже важно…
Какой геморрой творится в ini… особенно если этих настоек много… Для этого есть реестр, но…

Если хранить их на сервере – то получишь независимость от компа… Пользователь получит свои настройки на любой машине… И рулить ими легче в одном месте…

Я как-раз имел ввиду хранение на сервере, например в виде некоторой
структуры в блобе (доп. плюс - возможность шифрования)
Структура считывается каждый раз после коннекта для конкретного юзера,
укладывается в памяти (TUserProfile) и лежит до следующего коннекта/переконнекта.

При необходимости изменить логику программы или настроить интерфейс,
в нужное время в нужном месте просто читаешь из этой структуры
нужную переменную и по её значению делаешь "нечто",
типа X = UserProfile.ReadInteger('X',0);
или Edit1.Enabled = UserProfile.ReadBoolean('Edit_Enabled',False);

Или изменить логику:

if UserProfile.ReadBoolean(Val1,False) then
// нечто
else
// нечто иное ...

ну и т.д. и т.п.
...
Рейтинг: 0 / 0
Распределение прав доступа в прогах...
    #32567065
mapnn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
olol
Вот тут я с тобой не согласен… Очень даже важно…
Какой геморрой творится в ini… особенно если этих настоек много… Для этого есть реестр, но…

Если хранить их на сервере – то получишь независимость от компа… Пользователь получит свои настройки на любой машине… И рулить ими легче в одном месте…

Я как-раз имел ввиду хранение на сервере, например в виде некоторой
структуры в блобе (доп. плюс - возможность шифрования)
Структура считывается каждый раз после коннекта для конкретного юзера,
укладывается в памяти (TUserProfile) и лежит до следующего коннекта/переконнекта.

При необходимости изменить логику программы или настроить интерфейс,
в нужное время в нужном месте просто читаешь из этой структуры
нужную переменную и по её значению делаешь "нечто",
типа X = UserProfile.ReadInteger('X',0);
или Edit1.Enabled = UserProfile.ReadBoolean('Edit_Enabled',False);

Или изменить логику:

if UserProfile.ReadBoolean(Val1,False) then
// нечто
else
// нечто иное ...

ну и т.д. и т.п.
...
Рейтинг: 0 / 0
Распределение прав доступа в прогах...
    #32567110
vis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в питоне есть возможность паковать объекты в строку (модуль pickle)

очень удобно хранить на стороне сервера различные пользовательские настройки, позволяет легко расширить справочник без изменения структуры
таблицы

в Делфи такого нет?
...
Рейтинг: 0 / 0
Распределение прав доступа в прогах...
    #32567483
olol
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mapnn
...в виде некоторой структуры в блобе (доп. плюс - возможность шифрования)...

Большой привет! Я не считаю себя БОЛЬШИМ программистом, да и на форуме недавно…
olol – это от имени (Злобин Олег)…
Сервер не дал назваться Oleg – типа такой уже есть и просто ol нельзя меньше четырех…

Игорь, ну не нравиться мне работа с BLOB... некий кусок непонятно чего...
Это хорошо только если там данные хранятся простым списком...
А шифровать можно и в обычном CHAR (главное не перестараться)...

Ведь нет ни какой разницы, если ты создаешь всего ОДНУ служебную табличку или ДЕСЯТЬ…
Я не против твоей компоненты, но смотри, что получается…

Все данные прекрасно бьются на связанные таблицы (формы, объекты, права…) и не нужно придумывать параметры типа Form1Edit1Enabled…
А потом программно присваивать соответствующей компоненте нужное свойство…

Я потому так быстро и переделал прогу под это управление, что каждой форме задал всего два события:

// В форме…

void __fastcall TForm1::FormCreate(TObject *Sender)
{ SLObj = new TStringList(); SLObj->Sort(); DMS->GetFrmAccess(SLObj, "Form1");
}//---------------------------------------------------------------------------
void __fastcall TForm1::FormShow(TObject *Sender)
{ DM->SetFrmAccess(SLObj, Form1); SelectFirst();
}//---------------------------------------------------------------------------

// В дата модуле…

void __fastcall TDM::GetFrmAccess(TStringList* SL, AnsiString ShFrm)
{ AnsiString s, ShObj,ShAcs;
s = "SELECT ShObj, ShAcs FROM psSFrmShFrm(:ShFrm) ORDER BY IdObj";
quSQL->SQL->Clear(); quSQL->SQL->Add(s);
quSQL->Params->ParamValues["IdExe"] = IdExe;
quSQL->Params->ParamValues["ShFrm"] = ShFrm;
quSQL->Open(); SL->Clear();
TField *FLShObj = quSQL->FieldByName("ShObj");
TField *FLShAcs = quSQL->FieldByName("ShAcs");
while (!quSQL->Eof)
{ ShObj = FLShObj->AsString; s = "";
while (FLShObj->AsString == ShObj && !quSQL->Eof)
{ ShAcs = FLShAcs->AsString;
if (s.IsEmpty()) s = ShObj.Trim() + "="; else s += ";";
s += ShAcs.Trim(); quSQL->Next();}
SL->Add(s);}
quSQL->Close();
}//---------------------------------------------------------------------------
void __fastcall TDM::SetFrmAccess(TStringList* SL, TForm* FM)
{ AnsiString s,ShObj,ShAcs; TComponent *CP; TControl *CT; TMenuItem *MI; bool b;
for (int i=0; i < SL->Count; i++)
{ ShObj = SL->Names ; ShAcs = SL->Strings; ShAcs = LStrGetR(ShAcs, "=");
CP = FM->FindComponent(ShObj);
if (CP)
if (CP->InheritsFrom(__classid(TControl)))
{ CT = (TControl*)CP; CT->Enabled = DMS->CheckAccess(ShAcs);}
else if (CP->InheritsFrom(__classid(TMenuItem)))
{ MI = (TMenuItem*)CP; MI->Enabled = DMS->CheckAccess(ShAcs);}}
}//---------------------------------------------------------------------------


Извиняй что на C++Builder…
Самый простой пример для установки всего одного свойства ‘Enabled’…
Для ЛЮБОЙ компоненты из TControl и TMenuItem…

Это конечно далеко не идеал, максимально упростил для понимания…
И работает только в случае, если каждый объект имеет одно право допуска…
(если есть несколько перекрывающихся, то нужен дополнительный цикл для суммы прав)

Процедура ‘psSFrmShFrm’ получает список прав, а CheckAccess – просто проверяет наличие этого права у пользователя…

Ведь и заполнять эти таблицы можно автоматически, как я говорил раньше…
Если установить этот модуль в прогу, запустить ее и вызвать настройку – она сама переберет все что найдет и заполнит их… (кроме прав, конечно)

А вот с базой она должна работать все-таки через ADO… (IB конечно неплохой, но не единственный…)
К тому же некоторые вещи все равно ODBC требуют, например: Crystal Reports или у нас CAD/CAM Adem…
...
Рейтинг: 0 / 0
44 сообщений из 44, показаны все 2 страниц
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Распределение прав доступа в прогах...
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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