![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| Gorets |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 30.5.2005 Репутация: нет Всего: нет |
Пишу бухгалтерскую программу. Пользователей будет много и каждому нужно дать доступ только к определенным частям програмы. Я думаю сделать это с помощью Enabled/Disabled определенных элементов интерфейса (кнопок, панелей, радиобатанов).
Каким образом лучше всего сохранить в базе данные по настройкам для каждого пользователя и потом при входе в прогу применить эти настройки? как вариант я думаю сохранять в базу приблизительно такие данные:
и т.д. а при входе надо как-то применить эти настройки.... вот только не знаю как это правильно прописать.. |
|||
|
||||
| Guedda |
|
|||
![]() Подрывник ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3137 Регистрация: 27.12.2005 Где: Ростов-на-Дону Репутация: 14 Всего: 78 |
Лучше всего, если пользователи не сильные в компах, написать все в Ini-файлах. Поищи по форуму, я уже постил про такое...
А если пользователи продвинутые, тогда лучше в реестр запихать. -------------------- Ll 2 |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
Лучше, не disabled, а visible.
Менять в OnShow формы. |
|||
|
||||
| Gorets |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 30.5.2005 Репутация: нет Всего: нет |
можно и visible... вот только как правильно это написать...
в базе хранится ведь стринговое значение fDogovor.btOk как обратиться к подобному объекту??? т.е сделать fDogovor.btOk.visible:=True Это сообщение отредактировал(а) Gorets - 23.3.2006, 14:45 |
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 15 Всего: 98 |
не с той стороны заходиш. нужно не к fDogovor.btOk.visible обращаться, а компонентом проверять значение...
-------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| Демо |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 3.11.2005 Репутация: 30 Всего: 50 |
Gorets,
Я думаю, что ты совершенно правильно думаешь. Только надо еще добавить поле "тип объекта", а поле статус должно иметь больше двух значений(например - только читать, читать и писать, только писать) Применяется такая схема просто. При первоначальной настройке выбираются все записи по данному пользователю с типом объекта "Интерфейс". Объекты интерфейса обрабатываются в соответствии с полученными записями. Для применения системы ограничений/разрешений во время работы программы нужно определиться, какие объекты будут задействованы в системе. Это могут быть операции изменения, конкретные таблицы, файлы и т.д. В БД добавляется хранимая процедура для проверки прав на конкретный объект. И перед любой операцией проверять права доступа на необходимые объекты. Конечно, только на словах выглядит все просто. На практике, конечно, всё значительно сложнее. -------------------- |
|||
|
||||
| Gorets |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 30.5.2005 Репутация: нет Всего: нет |
вот например получил я из базы данные:
fDogovor.btOk и 1 как мне теперь обратиться к объекту fDogovor.btOk и сделать его видимым? может так? меня интересует синтаксис! object(fDogovor.btOk).visible:=True; |
|||
|
||||
| Демо |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 3.11.2005 Репутация: 30 Всего: 50 |
Тебе не нужно так делать. Ведь интерфейсная часть - наиболее постоянная часть программы. У тебя в программе ограниченный набор объектов интерфейса. Зафиксируй для каждого такого объекта имя, под которым он будет находиться в БД. По сущестыу - таблица соответствия, которую тоже в БД можно вынести. -------------------- |
|||
|
||||
| Gorets |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 30.5.2005 Репутация: нет Всего: нет |
так я это и делаю..... только как потом по этому имени обратиться к объекту? я делаю так:
|
||||
|
|||||
| bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 31 Всего: 88 |
а что зы движок базы данных? может пожно на этом уровне все сделать?
ну или шифровать часть базы паролем юзера -------------------- Обижено школьников: 8 |
|||
|
||||
| Gorets |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 30.5.2005 Репутация: нет Всего: нет |
кажется решил..
|
|||
|
||||
| Gorets |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 30.5.2005 Репутация: нет Всего: нет |
все замечательно работает если объектом является Button,Panel,RadioButton и т.д. а вот с элементами главного меню и контекстного меню такой вариант не проходит.... как быть? |
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 15 Всего: 98 |
ага. поэтому делаем не через cout, а по-человечески...
-------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| Gorets |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 30.5.2005 Репутация: нет Всего: нет |
жду примера в таком случае!!!
|
|||
|
||||
| Guedda |
|
|||
![]() Подрывник ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3137 Регистрация: 27.12.2005 Где: Ростов-на-Дону Репутация: 14 Всего: 78 |
По-моему, ты напутал форум с C++ -------------------- Ll 2 |
|||
|
||||
| Демо |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 3.11.2005 Репутация: 30 Всего: 50 |
Ну зачем тебе обращаться по имени, записааном в БД?
Ведь таких элементов у тебя не тысячи. -------------------- |
|||
|
||||
| Guedda |
|
|||
![]() Подрывник ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3137 Регистрация: 27.12.2005 Где: Ростов-на-Дону Репутация: 14 Всего: 78 |
А если все-таки тысячи? Допустим, элементов в меню больше 300, и в PopUp больше ста, да еще и кнопок уйма... Кажется, что человек делает платформу. У меня есть статья по написанию программ с правами доступа. Как найду, напишу здесь...
-------------------- Ll 2 |
|||
|
||||
| Демо |
|
||||||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 3.11.2005 Репутация: 30 Всего: 50 |
В конце-концов можно и спец. класс создать для работы с твоими элементами управления. Простой пример(схема, как можно обратиться по имени, наприм, к функции):
Добавлено @ 17:52
Тогда прямая дорога к использованию в каждом элементе управления поля Tag. Записываем в базу, заием поиск в RunTime по тегам. -------------------- |
||||||||||
|
|||||||||||
| Guedda |
|
|||
![]() Подрывник ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3137 Регистрация: 27.12.2005 Где: Ростов-на-Дону Репутация: 14 Всего: 78 |
Вот!!! Скорее всего, лучше этим воспользоваться. Писать в базу не названия компонентов, а их Tag -------------------- Ll 2 |
|||
|
||||
| Gorets |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 30.5.2005 Репутация: нет Всего: нет |
да все замечательно работает и так как я сделал!
+ так очень удобно хранить настройки не зависимо от к-ва элементов! нашел вариант и для менюшек:
Добавлено @ 17:59 я например изначально все кнопки в меню делаю невидимыми, а потом в зависимости от залогинившигося пользователя делаю видимыми только нужные ему кнопки! Добавлено @ 18:00 и база данных для хранения настроек очень простая и понятная! |
|||
|
||||
| Anakin |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 192 Регистрация: 25.9.2006 Репутация: нет Всего: нет |
Пробовал я вариант который предложил 2 Демо
Разместил на форму 3 кнопки и сделал их инвизибл. Но почему то у меня работает тока первая кнопка так как она первая в таблице. (( КТо может подсказать в чем трабла ? И не как не мог разобратса с вариантом 2 Gorets Никак не могу его понять (( Как он работает. Можетли кто то показать пример по больше ?
Зарание Благодарен. Это сообщение отредактировал(а) Anakin - 7.3.2007, 09:47 |
||||
|
|||||
| samec |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 19.1.2007 Репутация: нет Всего: нет |
надо для каждой кнопки (эдита, мемо и т.п.) писать свой код, например:
и.т.п... если компонент много, то лучше использовать вариант предложенный Gorets |
||||
|
|||||
| Anakin |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 192 Регистрация: 25.9.2006 Репутация: нет Всего: нет |
2 samec
Да это я понял что нуна на каждую кнопку. ВОт допустим я поставил данный код в OnShow Формы где размещены данные элементы. И при запуске срабатывает тока первая кнопка которая хранитса в Базе. |
|||
|
||||
| ama_kid |
|
||||
![]() АСУТП-кодер ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1460 Регистрация: 5.3.2007 Где: Москва Репутация: 15 Всего: 95 |
Чо-та я не понял.. Рекурсии никого не учили что ли? Дали ведь хороший совет - использовать теги (зачем имена компонентов хранить в БД? Имхо - бред)...
Вот тестовый пример: я накидал на форму десять компонентов (главное меню с двумя пунктами, каждое содержит по два подпункта, кнопку, листбокс, едит). И еще одну кнопку, по которой будет все выполняцца... Всем элементам присвоил уникальные теги от 1 до 9. За настройки у меня отвечает константный массив (индекс в массиве = тэгу элемента), у топиккреатора - это может быть считываемый массив или еще что-нибудь, не важно... Привожу код модуля:
Как видно - у меня есть одна маленькая функция, которая вызывается рекурсивно для всех элементов формы (или любого компонента, заданного в качестве параметра). Размер функции практически не зависит от количества элементов (+/- пара строк если есть другие наследники TComponent, ну и оптимизация не помешала бы). Пример, конечно, тестовый, но он показывает как можно общаться с настройками компонентов. Настройки можно хранить просто массивом. Можно спокойно использовать как Visible, так и Enable... В общем адаптировать под конкретную задачу, думаю труда не составит... Какие неудобства у данного метода? Ненаглядность настроек в БД? Имхо - чушь, ибо пользователи не должны лезть в БД, а если лезут - им надо затруднить по маскимуму кастомизацию настроек. Необходимость использования массива? Ну, если жалко памяти - храните просто количество компонентов и используйте динамические массивы. Ненаглядность кода? Простите, но на таком малом объеме кода эта ненаглядность абсолютно нивилируется... Короче, это просто информация к размышлению, конкретную реализацию в итоге выбирать вам... Добавлено: Кстати, если все-таки хочешь хранить имена компонентов - можешь использовать следующую конструкцию цикла:
Это сообщение отредактировал(а) ama_kid - 7.3.2007, 13:41 -------------------- самурай без меча подобен самураю с мечом, но только без меча |
||||
|
|||||
| Anakin |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 192 Регистрация: 25.9.2006 Репутация: нет Всего: нет |
2 ama_kid
Вроде как немного понял. Если просьба я понимаю может звучать нагло но не мог бы ты маленький пример всего этого дать. Типа накидать там пару Элементов и показать как всё это обращаетса к БД. ПРсота я новенький и не всё сразу схватываю ( А когда есть пример рабодчий мона его поковырять и увидеть как всё там работает. ( Ещё раз прошу прощение за наглось ( ЗА рание Благодарен. |
|||
|
||||
| MAX2002 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 14.3.2006 Репутация: нет Всего: нет |
Ндаа прям камасутра у тебя какая то
, даю бесплатный совет, в Buildere и Delphi есть ActionManager, переводишь всю работу своей программы и все обработчики на екшены, и при onShow энейблишь их или дисейблишь..... |
|||
|
||||
| Elfebet |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 545 Регистрация: 15.5.2006 Где: Украина. Запорожь е. Репутация: 2 Всего: 14 |
ИМХО тада и тэги хранить тоже бред, лучше всего сохранять индекс компонента, тогда и не надо содавать массив, так как индекс компонента всегда уникальный.
Добавлено @ 14:47 А вообще правильно бы запихать кнопки и т.п в панель и эту панель для конретного пользователя прятать, а не каждую кнопку и т.п. делать визибл. -------------------- Программист не должен всё знать... он должен знать где можно посмотреть |
||||
|
|||||
| Anakin |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 192 Регистрация: 25.9.2006 Репутация: нет Всего: нет |
2 Elfebet Да но Учти что есть допустим некоторые кнопки тоторые нуна спрятать. А некоторые оставить. Если ятебе понял правельно то ты хочешь проста запихать всё в Одно и при какихто усливиях прятать или показывать всю понель. Так не годитса.
Мне интересен способ автора данного топика но до меян никак не доезжает как всё это сделать. ( Тоесть впринципе я то знаю как их спрятот и как показать элементы. Но вот как сделать так что бы при вводе логина и пароля всё это обращалось к базе и считывалсоь от туда ( По этому и прошу пример ибо я новенький ( 2 ama_kid Попробовал твой вареант. Скажу что короший и удобный ) Но вот как к этой процедуре прикрутить базу с Логином паролем и уровнем доступа. Вот сиджу и чешу репу и никак не допираю. Я знаю что тут есть грамотные спецы помогите плизз начинающему. Если мона по внятней разжвать Прсоат очень кочетса сделать такую штуку ибо интерес есть а мозгов никак не хватает. ( |
|||
|
||||
| Elfebet |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 545 Регистрация: 15.5.2006 Где: Украина. Запорожь е. Репутация: 2 Всего: 14 |
Anakin, записываеш в базу индекс копмонента которого нужно спрятать/отобразить и все.
т.е. примерно где-то так:
Это сообщение отредактировал(а) Elfebet - 7.3.2007, 15:49 -------------------- Программист не должен всё знать... он должен знать где можно посмотреть |
|||
|
||||
| Anakin |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 192 Регистрация: 25.9.2006 Репутация: нет Всего: нет |
2 Elfebet ДАвай по порядку.
1) Куда этот код нуна поместить в обрабодчик событий какого элемента ? 2) Что значит index 3) ЧТо это за поле и что в нем должно хранитса ? IndexComponent Обьясни плизз.. Если не сложно. Дальше вот я так наскоряк накидал пару компонентов и базу. КТо может гляньте плиз на изходник и скажите что там не правельно. У меня там никак не получаетса его соеденить с базой что бы при вводе логина и паса он вырубал Элементы. Если мона подправте плизз. Зарание благодарен. Это сообщение отредактировал(а) Anakin - 7.3.2007, 16:29 Присоединённый файл ( Кол-во скачиваний: 4 )
Project1.rar 22,76 Kb |
|||
|
||||
| Anakin |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 192 Регистрация: 25.9.2006 Репутация: нет Всего: нет |
И прилагаю второй пример.
И с нимже опять проблема. Не могу сделать ввод пароля и логина и что бы она читала логин и пасс с БД и на соответствующий уровень доступа она прятало элементы ( Присоединённый файл ( Кол-во скачиваний: 3 )
Project2.rar 23,70 Kb |
|||
|
||||
| Elfebet |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 545 Регистрация: 15.5.2006 Где: Украина. Запорожь е. Репутация: 2 Всего: 14 |
вот посмотри этот пример (это твой переделанный)
Присоединённый файл ( Кол-во скачиваний: 8 )
Project.rar 23,70 Kb-------------------- Программист не должен всё знать... он должен знать где можно посмотреть |
|||
|
||||
| ama_kid |
|
||||
![]() АСУТП-кодер ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1460 Регистрация: 5.3.2007 Где: Москва Репутация: 15 Всего: 95 |
Нет, на самом деле, это не совсем бред - индекс компонента - он, конечно, уникальный, но все-таки при определенных условиях может меняться (ну убрали кнопку с формы или еще что-нибудь сделали с формой - индекс поменяется у остальных элементов - что, всю БД перелопачивать вручную и переставлять индексы?). А тэг - это скорее не уникальный идентификатор компонента, а если так можно выразиться идентификатор уровня доступа. Т.е. ты можешь назначить нескольким элементам одинаковый тэг и тогда они будут видны при одинаковых условиях. И получается, в БД можно хранить не индексы компонентов, а уровни доступа/имя пользователя/пароль... И вообще, я не упирал на то, что надо использовать массивы - я этот пример за две минуты налабал просто чтоб показать как работать с компонентами - массивы - просто первое, что пришло в голову, ясно, что оптимизация имеет место и должна быть... Anakin
В качестве примера привожу набросанную щас на коленке программу... Там есть все - и работа с уровнями доступа, и с БД без всяких тяжеловесных компонентов... Это сообщение отредактировал(а) ama_kid - 8.3.2007, 09:25 Присоединённый файл ( Кол-во скачиваний: 29 )
MyTestDB.rar 14,94 Kb-------------------- самурай без меча подобен самураю с мечом, но только без меча |
||||
|
|||||
| Anakin |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 192 Регистрация: 25.9.2006 Репутация: нет Всего: нет |
2 ama_kid Респект тебе. Замечательный пример. И я согласен с тем что с TEG Куда всё проще.
Вот сижу сейчас и ковыряю твой пример. Нет ну прямо любоуюсь как тут всё до тупости проста. Тока оптимизировать нуна и всё. ОГРОМНОЕ Спасибо тебе. 2 Админам и Модерам Если мона прикрутите эту тему Ибо она многим нужна. |
|||
|
||||
| Anakin |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 192 Регистрация: 25.9.2006 Репутация: нет Всего: нет |
2 ama_kid Прошу прощения за настоичивость и назойливость. Но у меня возник вопрос.
По твоему коду.
Как тут производитса расчет уровня доступа. Тоесть откуда программа знает что даёт 1 ЛвЛ доступа и 6 ЛвЛ доступа. Зарание Благодарен. Это сообщение отредактировал(а) Anakin - 12.3.2007, 14:26 |
|||
|
||||
| ama_kid |
|
||||||
![]() АСУТП-кодер ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1460 Регистрация: 5.3.2007 Где: Москва Репутация: 15 Всего: 95 |
Anakin
Давай по шагам: 1) Получение параметров текущего юзера (по имени):
2) Определение уровня доступа для юзера, который ему выделил "виртуальный админ", и который забит в базу данных:
3) В цикле по всем компонентам: у каждого компонента есть свойство Tag, которое в данном приложении обозначает буквально следуюущее: "Минимальный уровень доступа, который нужно иметь юзеру, чтобы иметь возможность работать с данным компонентом". А операнд
-------------------- самурай без меча подобен самураю с мечом, но только без меча |
||||||
|
|||||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |