|
|
|
Распределение прав доступа в прогах...
|
|||
|---|---|---|---|
|
#18+
К вопросу об администрировании и распределению прав... в прогах при работе с данными на SQL сервере. Этот вопрос к работе любого сервера (не только на IB и др.), но ведь вы с базой все равно на какой-нибудь проге работаете... Задал вопрос на Delphi и чей-то, как-то, никому и никак... Хочу узнать как делают это другие... НАПРИМЕР: при вводе данных необходимо обеспечить распределение прав между пользователями типа: - занесение заказов (заявок) - простановка дат изготовления (планирование) - заполнение технологии (порядка работы) - ... При этом на одной форме операций разные пользователи заносят данные только в свои поля... Если делать только на уровне прав базы - то не приятно нажав Ок получить сообщение что у вас нет прав... Лучше вообще не давать это делать... Делать отдельные формы для каждого - глупо (сегодня у него одни права, а завтра - другие). Я создал служебные таблицы в которых храню 'Имена форм', 'Имена объектов на формах' и 'Права доступа к объектам'. На OnCreate формы считываю этот список в массив, а на OnShow раставляю своийства Enabled и Visible в соответствии со списком прав пользователя (который получаю при входе в систему)... При этом 'запрещенные' кнопки, меню... - серенькие или нет совсем. Для удобства элементы разбиты на группы по панелям (чтоб не задавать для каждого). Управление основано на ограничении прав, а не на разрешении... т.е. заносятся только те формы и элементы доступ к которым необходимо ограничить. При этом все реализуется просто (цепляешь по две функции к формам) и правами рулиш без изменения проги (вплоть до права печати отчетов)... Поделитесь своим опытом, кто что знает и какие у кого в этом вопросе проблемы... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2004, 11:59:26 |
|
||
|
Распределение прав доступа в прогах...
|
|||
|---|---|---|---|
|
#18+
Посмотри IBXUserProfile - потом и нам расскажешь, а то у меня времени небыло смотреть :-( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2004, 12:48:07 |
|
||
|
Распределение прав доступа в прогах...
|
|||
|---|---|---|---|
|
#18+
GoldПосмотри IBXUserProfile - потом и нам расскажешь, а то у меня времени небыло смотреть :-( Благодарю... хоть что-то... бум смотреть... А что больше это никому не нужно? Или уже давно решеный вопрос? Тогда дайте хотябы ссылку... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2004, 13:06:58 |
|
||
|
Распределение прав доступа в прогах...
|
|||
|---|---|---|---|
|
#18+
Уровень прав на приложении не совсем хороший тон. Часть прав все равно надо делать на уровне БД. Возможно ограничение на уровне VIEW. в табличку вносится поле содержащее роль того или иного отдела и соответсвенно видимые/невидимые записи отбираются условием типа: Код: plaintext соответсвенно все операции идут через VIEW, правда придется написать триггеры на вьюшку. Другой вариант когда на каждый оперативный отдел делается вьюха через которую работает он и роль отдела имеет права на вьюху. Тоже самое можно сделать через хранимки. На практике желательно избегать прямых прав пользователей на таблицы. Как то я уже обжегся с тех пор препочитаю перестраховаться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2004, 16:02:35 |
|
||
|
Распределение прав доступа в прогах...
|
|||
|---|---|---|---|
|
#18+
ActionList, все действия - через него. Каждому TActionItem прописывается индивидуальный Tag. таким образом вся раздача прав выполняется вложенным циклом. Более сложный случай (то, что и использую). константные массивы: 1. массив форм (массив строк) 2. массив групп действий (массив строк) 3. массив действий [0..CountActions]: название, номер формы, номер группы, тэг. в базе хранится строка из 0 или 1, длинной как массив [3], т.е. на каждое действие доступ есть/нету. После коннекта к базе всем формам рассылается сообщение "обновиться", и в каждой форме свой обработчик закрывает/открывает доступы к обьектам по общедоступному массиву доступа access: array[0..CountActions] of boolean; На главной форме в одном цикле настраивается доступ к главному меню. Так же в одном цикле настраиваются все формы, основанные на ActionList. при такой организации массива 3 через treeView легко делается форма настройки прав. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2004, 16:27:07 |
|
||
|
Распределение прав доступа в прогах...
|
|||
|---|---|---|---|
|
#18+
А почему бы не просматривать RDB$USER_PRIVILEGES и так заранее узнавать о правах. Работа с метаданными - это универсально. Зачем зря пытаться до получения ошибки? К тому же при работе через ODBC текст ошибки можно перехватывать, а текст ошибки формировать Exception-ом в IB(в виде собственного кода) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2004, 17:40:50 |
|
||
|
Распределение прав доступа в прогах...
|
|||
|---|---|---|---|
|
#18+
2 Winni-Pooh Хочу вас уведомить что заЕбешься пишется в этом случае БОЛЬШИМИ БУКВАМИ :))))) Во вторых это вынос разбора прав в приложение - а это evil. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2004, 18:18:48 |
|
||
|
Распределение прав доступа в прогах...
|
|||
|---|---|---|---|
|
#18+
О каком зле ты говоришь? И как ты это зло себе представляешь? Пойми - это обработка МЕТАДАННЫХ! Это универсально изначально. А на метаданные тоже вообще-то можно правильно распределить права. Вот и все. И поверь мне- это самый короткий код(если руки правильно растут), и никакого гемора. :-)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2004, 18:52:25 |
|
||
|
Распределение прав доступа в прогах...
|
|||
|---|---|---|---|
|
#18+
Зло это объем работы для реализации... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2004, 19:06:21 |
|
||
|
Распределение прав доступа в прогах...
|
|||
|---|---|---|---|
|
#18+
Вынос прав в приложение опасен тем что найдутся люди и в зависимости от ценности информации будут вносить изменения ручками в обход твоей безопасности реализованной в приложении. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2004, 19:29:47 |
|
||
|
Распределение прав доступа в прогах...
|
|||
|---|---|---|---|
|
#18+
Я так не думаю.. А по поводу ХП и вьюшек просто добавлю для olol, что последние - прекрасное средство ограничения доступа для массового изменения содержимого таблицы. Поясню: некоторым работникам(ролям)необходимо логически дать право удалять записи из какого-либо журнала. Если просто дать право на DELETE, то юзер по глупости и из чувства ламерства может ухнуть нахрен все содержимое таблицы за раз, хотя тебе хотелось, чтобы удаление могло происходить только по 1 записи(документу) и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2004, 19:32:58 |
|
||
|
Распределение прав доступа в прогах...
|
|||
|---|---|---|---|
|
#18+
Безопасность это комбинация приложения и БД. и нельзя всю выносить все в приложение. Аксиома. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2004, 19:39:53 |
|
||
|
Распределение прав доступа в прогах...
|
|||
|---|---|---|---|
|
#18+
to Tonny Решение типа ActionList хорошо, если проектируешь небольшую информационную систему, а если большую, полиморфную, то наоборот, стремятся убрать из клиента ВСЕ ДАННЫЕ о бизнес-правилах работы клиента. В этом случае ВСЕ ДОЛЖНО ХРАНИТЬСЯ В БАЗЕ ДАННЫХ, даже схемы обработки документов. Только тогда при изменении правил программеру не придется лезть в исходник или мудрить с совершенной системой обновления логических настроек клиента. Представь систему на 150-200 пользователей, с 10-20 видами АРМов, где есть общие универсальные модули работы с данными, зависящими от бизнес-правил ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2004, 19:41:10 |
|
||
|
Распределение прав доступа в прогах...
|
|||
|---|---|---|---|
|
#18+
Вот блин заработался .... прям говорить внятно разучился :))))))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2004, 19:41:53 |
|
||
|
Распределение прав доступа в прогах...
|
|||
|---|---|---|---|
|
#18+
to Igor Elyas Полностью с вами согласен. Но имею в виду причину не безопасность, а гибкость системы в целом ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2004, 19:43:26 |
|
||
|
Распределение прав доступа в прогах...
|
|||
|---|---|---|---|
|
#18+
to Igor Elyas Моя последняя реплика к вашей предпоследней, если что.... :D. Предлагаю перейти к обсуждению предложенной мной темы по трехзвенке как более мощной форме распределения прав и контроля Базы Данных и рассматривать как продолжение текущей теме....Просто я не нашел на этом форуме обсуждения трехзвенки ранее ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2004, 19:53:27 |
|
||
|
Распределение прав доступа в прогах...
|
|||
|---|---|---|---|
|
#18+
Спасибо за обсуждение, не успел ничего спросить… (рабочий день кончился). Пару слов от себя: GoldПосмотри IBXUserProfile - потом и нам расскажешь, а то у меня времени небыло смотреть :-( Посмотрел… Ну что сказать… Возможно кого-то заинтересует… но хранение прав в BLOB меня не прельщает… Winni-Pooh А почему бы не просматривать RDB$USER_PRIVILEGES… …это универсально. Хоть это форум IB и др., но если говорить об универсальности то, как быть с Oracle, MS и др. Каждый варится в собственном соку… У меня сегодня IB – а завтра его могут уничтожить как класс и все делать на Oracle (на нем - зарплата и сие от меня не зависит). Winni-Pooh …ВСЕ ДОЛЖНО ХРАНИТЬСЯ В БАЗЕ ДАННЫХ, даже схемы обработки документов. Разве в RDB$USER_PRIVILEGES есть перечень прав к формируемым отчетам? Или предлагаешь их туда занести? Igor Elyas Уровень прав на приложении не совсем хороший тон. Часть прав все равно надо делать на уровне БД. Проверка прав прогой вовсе не исключает наличие прав в БД. Я согласен, что безопасность - это комбинация приложения и БД, но разве есть какая-то разница между работой через ХП с ограниченными правами и заданию этих же прав на элементы прогой? Причем когда я, например, вывожу форму для редактирования выполняемой операции, то разные пользователи заносят только свои данные, а доступа к ‘чужим’ у них нет, хотя они отображаются. Главное - я уяснил – что сделал не так уж и плохо… мож кто истчо чо добавит… ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2004, 07:26:55 |
|
||
|
Распределение прав доступа в прогах...
|
|||
|---|---|---|---|
|
#18+
в процессе размышлений на эту тему я пришол к выводу о необходимости создания промежуточного звена, отвечающего за доступ к объектам. Это касается только моего конкретного случая, насколько это подойдет к другим задачам - другой вопрос. В моем случае пользователи работают не с таблицами, полями или процедурами, они работают с документами и свойствами документов. Вот я и думаю, что промежуточный слой должен преобразовывать запросы клиентских приложений на получение/изменение документов в запросы к sql серверу сообразно правам доступа пользователя, который делает запрос. Причем пользователь будет определен как пользователь NT домена, а не пользователь базы данных. Но это только мысли, на практике у меня этот промежуточный слой зашит в клиентскую программу, что конечно не есть гут. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2004, 07:46:45 |
|
||
|
Распределение прав доступа в прогах...
|
|||
|---|---|---|---|
|
#18+
Посмотри здесь. имхо: это то что доктор прописал :))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2004, 08:39:36 |
|
||
|
Распределение прав доступа в прогах...
|
|||
|---|---|---|---|
|
#18+
alex_k В моем случае пользователи работают не с таблицами, полями или процедурами, они работают с документами и свойствами документов. Что значит - работают с документами? Если это таблица с полями свойств и BLOB полем для хранения файла документа - то какая разница? Любое действие в проге происходит не само посебе, а нажав соответствующую пимпочку или пунтик меню, кроме 'быстрых' клавиш (которые всеравно должны быть привязаны к ним). Соответственно, если все визуальные элементы будут перечислены с правами доступа, то любое действие в проге можно рулить... И пускай не смущает 'большой' перечень прав... ведь в твоей проге они серано задаются и проверяются... а на деле перечень окажется не очень большим. У меня есть таблица групповых прав и состав групп Например: Технические службы->Конст.Тех.отдел->Технологи->Ведущий технолог Задав юсеру право 'Ведущий технолог' - он автоматом получает и все остальное... Чем ниже право - тем больше, но уже. Можно задать любую группу включив туда всего помаленьку... Весь перечень прав я получаю по ХП одним запросом... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2004, 08:43:17 |
|
||
|
Распределение прав доступа в прогах...
|
|||
|---|---|---|---|
|
#18+
Еще здесь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2004, 08:49:04 |
|
||
|
Распределение прав доступа в прогах...
|
|||
|---|---|---|---|
|
#18+
Dik76Посмотри здесь. имхо: это то что доктор прописал :))) Не понял юмора... я не такой гигант мысли... Ну потратил я на создание этих таблиц и форм их редактирования пару дней... Потом за полчаса переделал программку... Зато теперь не надо менять прогу из-за того, что кому-то что-то надо разрешить или запретить... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2004, 09:14:20 |
|
||
|
Распределение прав доступа в прогах...
|
|||
|---|---|---|---|
|
#18+
Ты не понял, там есть ядро безопасности. Права доступа определяются через него. Переписывать ни чего не надо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2004, 09:20:34 |
|
||
|
Распределение прав доступа в прогах...
|
|||
|---|---|---|---|
|
#18+
[quot olol Что значит - работают с документами? [/quot] это значит что в принципе, пользователю не важно что и как. он работает с документом. Медиаплан, счет, прайслист, не важно. В любом случае он видит то что получит. Обычно это табличка в стиле екселя, в которой он заполняет нужные поля. Поэтому эти данные, из которых состоит документ, вполне возможно передавать клиенту и не в виде результата sql запроса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2004, 09:22:30 |
|
||
|
Распределение прав доступа в прогах...
|
|||
|---|---|---|---|
|
#18+
Dik76 …там есть ядро безопасности. …Переписывать ни чего не надо. Не для меня все это… В одиночку такое не делают… И что значит ‘ни чего не надо’? Насколько я понял, сама прога должна быть написана с обращением к объекту ядра… Что мне писать новую прогу? Времени нет и на текущие дела… Да и не бесплатно это… to alex_k Если прога берет данные не из таблиц – то я пас… Хотя их наверно тоже можно перечислить и описать (в прогу же закладываешь какую-то логику) Да и с прямым вводом в грид нужно делать немножко по другому… Ведь грид – это один объект, а нужен доступ к ячейкам грида… Я над этим не заморачивался… у меня просто нет прямого редактирования в гридах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2004, 09:56:03 |
|
||
|
Распределение прав доступа в прогах...
|
|||
|---|---|---|---|
|
#18+
2 Winni-Pooh Трехзвенка это очень обширная задача. Сколько реализаций столько идей. Сформулируй вопрос ... можно будет обсудить. На своей практике нужда в трехзвенке у меня возникала только в случае доступа удаленных офисов к общей БД через web. На самом деле она решает часть сложных проблем за счет увеличения сложности и стоимости разработки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2004, 11:46:25 |
|
||
|
Распределение прав доступа в прогах...
|
|||
|---|---|---|---|
|
#18+
to Igor Elyas Winni-Pooh этот вопрос продолжил в теме: Multi-Tier, или трехзвенка ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2004, 11:58:31 |
|
||
|
Распределение прав доступа в прогах...
|
|||
|---|---|---|---|
|
#18+
авторНасколько я понял, сама прога должна быть написана с обращением к объекту ядра… Что мне писать новую прогу? Да, нужен еще интерфейс для администрирования доступа. авторДа и не бесплатно это… Я не предлагаю покупать :))) Сама идея - вот суть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2004, 12:55:04 |
|
||
|
Распределение прав доступа в прогах...
|
|||
|---|---|---|---|
|
#18+
Dik76 Сама идея - вот суть. Идея - это хорошо... а у тебя как реализовано? Или тока идеи? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2004, 13:20:11 |
|
||
|
Распределение прав доступа в прогах...
|
|||
|---|---|---|---|
|
#18+
>Winni-Pooh представляю :) я такую систему внедрял. Всё как вы говорите: трёхзвенка, вся бизнес-логика, вся безопасность - на сервере БД (MSSQL). Приведенный мной вариант -действительно для достаточно простой системы, где функциональность АРМ задаётся указанием доступных для использования функций и прав. Но кому интересно - могу описать подробнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2004, 10:36:33 |
|
||
|
Распределение прав доступа в прогах...
|
|||
|---|---|---|---|
|
#18+
ololа у тебя как реализовано? У меня реализованно упрощенная версия ядра (разграничение доступа на уровне динамически формируемого меню). Предоставление доступа к пунктам реализуется через утилиту администратора. Сейчас работаю как раз над разграничением на уровне операций. Попутно хочу описав объекты системы, хотя бы частично автоматизировать написание клиента. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2004, 11:17:00 |
|
||
|
Распределение прав доступа в прогах...
|
|||
|---|---|---|---|
|
#18+
Dik76 ...упрощенная версия ядра... Ты динамически создаеш ФОРМЫ с меню или только меню на готовых формах? Если только меню...... А если формы, то на них кроме меню бывает целая куча различных элементов ввода... Хотя конечно можно для каждой роли создать свою форму... Но там и без ролей хватает проблем, например с передачей параметров выбора между динамическими формами... А на счет модуля Администрирования... дык я на него и потратил 2 дня... Просто создать таблицы и занести туда права обычным SQL Explorer можно и за час... (немного загнул... смотря сколько форм и прав). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2004, 11:52:01 |
|
||
|
Распределение прав доступа в прогах...
|
|||
|---|---|---|---|
|
#18+
авторА если формы, то на них кроме меню бывает целая куча различных элементов ввода... Вот об этом и речь. Я приследую цель описав объекты системы (ПР: объект - сотрудник, свойства - ФИО, ДР...), управлять доступом уже до свойств объекта. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2004, 12:35:23 |
|
||
|
Распределение прав доступа в прогах...
|
|||
|---|---|---|---|
|
#18+
Dik76 ...объекты системы... Насколько я понял твои объекты имеют мало что общего с тем куда ты меня посылал... вот там точно крыша съедит... Можешь сам посмотреть в разделе 'Проектирование' тема 'Люди свершилось...' Твой объект 'сотрудник' привязан к полю таблицы или элементу ввода на форме с указаниеп его типа? (Edit, ListBox...) И вообще под какую задачу пишешь? Или просто заготовка на будущее? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2004, 13:05:25 |
|
||
|
Распределение прав доступа в прогах...
|
|||
|---|---|---|---|
|
#18+
Насколько я понял твои объекты имеют мало что общего с тем куда ты меня посылал... отсылал сюда (пост можно сказать описывает мою цель, ядро безопасности лишь модуль), потому что вещь интересная. я реализую по своему. Твой объект \'сотрудник\' привязан к полю таблицы или элементу ввода на форме с указаниеп его типа? (Edit, ListBox...) он привязан к сущности (таблице), а поля являются атрибутами. Для атрибутов указывается их визуальное представление (Edit, ...). И вообще под какую задачу пишешь? Или просто заготовка на будущее? Делаю не зависимую систему, т.е. это промежуточный слой м/у реляционной БД (на oracle) и клиентом (Delphi). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2004, 16:49:57 |
|
||
|
Распределение прав доступа в прогах...
|
|||
|---|---|---|---|
|
#18+
Всем привет! Когда-то я написал IBXUserProfile но вскоре понял, что это ошибка. Невозможно сделать нечто универсальное для настройки всего "визуального" на все случаи жизни. По-моему, более правильный вариант использовать простые пользовательские переменные (неважно где их хранить) наподобие ini - файла и по их текущему значению настраивать интерфейс и логику программы - это более гибко. Я это использую в достаточно большой системе (10 филиалов, разбросанных по городу в радиусе 50 км) По этому поводу, я написал компонент IBXUserProfiles 2.0, не очень удачный, но у меня (в моей компании) работает без проблем. Кому интересно, заглядывайте на http://www.sinn.ru/~mapnn С уважением, Игорь Ильинский ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2004, 19:59:08 |
|
||
|
Распределение прав доступа в прогах...
|
|||
|---|---|---|---|
|
#18+
mapnnВсем привет! Когда-то я написал IBXUserProfile но вскоре понял, что это ошибка. По этому поводу, я написал компонент IBXUserProfiles 2.0, не очень удачный, но у меня (в моей компании) работает без проблем. при всем уважении :-) напоминает историю развития технологий майкрософт. "но потом другая группа разработчиков увидела фатальный недостаток в com - его придумали не они!" (с) вольный :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2004, 20:05:33 |
|
||
|
Распределение прав доступа в прогах...
|
|||
|---|---|---|---|
|
#18+
Привет Alex "Всегда хочется <как лучше>, а получается <как всегда>" (c) Черномырдин С другой стороны, мне не стыдно, так-как не ошибается тот кто ничего не делает, а тот, кто хоть что-то пытается, того заочно можно простить .... mapnn :)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2004, 20:18:03 |
|
||
|
Распределение прав доступа в прогах...
|
|||
|---|---|---|---|
|
#18+
Dik76 ...ядро безопасности лишь модуль... …указывается их визуальное представление... Вот тут ты батенька ошибаешься. Это СооовСееем разные вещи… Описание объектов как классов и свойств – другая задача, хотя и там есть своя система безопасности… Зри внимательней… там две части: свойства связанные с данными (таблицами, их взаимодействием и защитой) и свойства интерфейса проги… (хотя тоже с правами) Не нужно их скрещивать (не Мичурин ведь)… Ничего хорошего не выйдет… А вот визуальные свойства и права их действия для пользователя являются едиными, поскольку относятся к общим объектам. Например: TEdit.Enabled, Visible, ReadOnly и OnClik… как в прочем и TForm.Height, Width и др. Dik76 Делаю не зависимую систему… Нужно быть немного реалистичней, если конечно хош создать нечто, чем заинтересуются другие… Если сделать модуль (лучше в виде компоненты) который позволит с минимальной доработкой проги ее разрулить… т.е. автоматизирует заполнение таблиц свойств допуска… Например: поможет из Application выдернуть все формы, из Form все объекты, а из Object его свойства, методы и проставить им соответствующие права… Тоды любой смогёт это быстро сделать и возможно даже спасибо скажут… Лично у меня сейчас на это времени нет… Если интересует могу описать что получилось по подробнее... mapnn …использовать простые пользовательские переменные (неважно где их хранить) наподобие ini – файла… Вот тут я с тобой не согласен… Очень даже важно… Какой геморрой творится в ini… особенно если этих настоек много… Для этого есть реестр, но… Если хранить их на сервере – то получишь независимость от компа… Пользователь получит свои настройки на любой машине… И рулить ими легче в одном месте… А вот считанные данные действительно можно хранить в простом массиве строк, например TStringList. Я считываю настройки для формы только один раз (при ее создании), а потом уже (при ее выводе) устанавливаю свойства объектов из полученного массива. При этом все параметры получаю одним SELECT из ХП без особого увеличения нагрузки и времени выполнения… И при смене пользователя, настройки для форм - те же (не нужно их перечитывать), просто при ее выводе свойства сменятся согласно новым правам… ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2004, 07:35:23 |
|
||
|
Распределение прав доступа в прогах...
|
|||
|---|---|---|---|
|
#18+
ololОписание объектов как классов и свойств – другая задача, хотя и там есть своя система безопасности… .. Не нужно их скрещивать (не Мичурин ведь)… Ничего хорошего не выйдет… Я попробую :))), потом расскажу что вышло. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2004, 09:11:16 |
|
||
|
Распределение прав доступа в прогах...
|
|||
|---|---|---|---|
|
#18+
olol Вот тут я с тобой не согласен… Очень даже важно… Какой геморрой творится в ini… особенно если этих настоек много… Для этого есть реестр, но… Если хранить их на сервере – то получишь независимость от компа… Пользователь получит свои настройки на любой машине… И рулить ими легче в одном месте… Я как-раз имел ввиду хранение на сервере, например в виде некоторой структуры в блобе (доп. плюс - возможность шифрования) Структура считывается каждый раз после коннекта для конкретного юзера, укладывается в памяти (TUserProfile) и лежит до следующего коннекта/переконнекта. При необходимости изменить логику программы или настроить интерфейс, в нужное время в нужном месте просто читаешь из этой структуры нужную переменную и по её значению делаешь "нечто", типа X = UserProfile.ReadInteger('X',0); или Edit1.Enabled = UserProfile.ReadBoolean('Edit_Enabled',False); Или изменить логику: if UserProfile.ReadBoolean(Val1,False) then // нечто else // нечто иное ... ну и т.д. и т.п. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2004, 12:46:51 |
|
||
|
Распределение прав доступа в прогах...
|
|||
|---|---|---|---|
|
#18+
olol Вот тут я с тобой не согласен… Очень даже важно… Какой геморрой творится в ini… особенно если этих настоек много… Для этого есть реестр, но… Если хранить их на сервере – то получишь независимость от компа… Пользователь получит свои настройки на любой машине… И рулить ими легче в одном месте… Я как-раз имел ввиду хранение на сервере, например в виде некоторой структуры в блобе (доп. плюс - возможность шифрования) Структура считывается каждый раз после коннекта для конкретного юзера, укладывается в памяти (TUserProfile) и лежит до следующего коннекта/переконнекта. При необходимости изменить логику программы или настроить интерфейс, в нужное время в нужном месте просто читаешь из этой структуры нужную переменную и по её значению делаешь "нечто", типа X = UserProfile.ReadInteger('X',0); или Edit1.Enabled = UserProfile.ReadBoolean('Edit_Enabled',False); Или изменить логику: if UserProfile.ReadBoolean(Val1,False) then // нечто else // нечто иное ... ну и т.д. и т.п. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2004, 12:52:34 |
|
||
|
Распределение прав доступа в прогах...
|
|||
|---|---|---|---|
|
#18+
в питоне есть возможность паковать объекты в строку (модуль pickle) очень удобно хранить на стороне сервера различные пользовательские настройки, позволяет легко расширить справочник без изменения структуры таблицы в Делфи такого нет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2004, 13:06:40 |
|
||
|
Распределение прав доступа в прогах...
|
|||
|---|---|---|---|
|
#18+
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… ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2004, 14:45:10 |
|
||
|
|

start [/forum/topic.php?all=1&fid=40&tid=1578417]: |
0ms |
get settings: |
5ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
56ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
| others: | 180ms |
| total: | 312ms |

| 0 / 0 |
